Using the variable “name” doesn't work with a JS object

后端 未结 4 2000
不知归路
不知归路 2020-11-21 06:11

The behaviour can be seen in this little snippet (execute it as a global script):

var name = {};
name.FirstName = \'Tom\';
alert(name.FirstName);
         


        
4条回答
  •  后悔当初
    2020-11-21 06:49

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

提交回复
热议问题