The behaviour can be seen in this little snippet (execute it as a global script):
var name = {};
name.FirstName = \'Tom\';
alert(name.FirstName);
Your name variable is actually window.name, because top-level variables declared with var are attached to the global object.
The HTML5 spec requires that window.name is a DOMString. This means that the value of window.name can only be a sequence of characters, not an object.
In Chrome, an attempt to use window.name to store anything except a primitive string will coerce the value to a primitive string. For example:
window.name = {};
window.name === "[object Object]"; // true
You can avoid this problem by using a name variable that is not in the top-level scope:
(function() {
var name = {};
// this `name` is not `window.name`
// because we're not in the top-level scope
console.log(name);
})();