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);
})();