使用变量"name"不适用于JS对象

Pia*_*swi 26 javascript object window-object

可以在这个小片段中看到该行为(将其作为全局脚本执行):

var name = {};
name.FirstName = 'Tom';
alert(name.FirstName);
Run Code Online (Sandbox Code Playgroud)

undefinedChrome中的警报产生但可以在IE和Firefox中使用.当我这样做时,我也得到一个奇怪的价值

alert(name);
Run Code Online (Sandbox Code Playgroud)

Dag*_*bit 29

window.name有一个特殊用途,应该是一个字符串.Chrome似乎明确地将其转换为字符串,因此var name = {};实际上最终给出了全局变量name(即window.name)的值"[object Object]".因为它是原始的,所以properties(name.FirstName)不会"坚持".

要解决此问题,请不要将其name用作全局变量.


aps*_*ers 8

name实际上window.name,您的变量是因为声明的顶级变量var附加到全局对象.

HTML5规范要求window.name是一个DOMString.这意味着,该值window.name可以仅是一个字符序列,而不是一个对象.

在Chrome中,尝试用于window.name存储除原始字符串之外的任何内容都会将值强制转换为原始字符串.例如:

window.name = {};
window.name === "[object Object]"; // true
Run Code Online (Sandbox Code Playgroud)

您可以通过使用name不在顶级范围内的变量来避免此问题:

(function() {
    var name = {};
    // this `name` is not `window.name`
    // because we're not in the top-level scope

    console.log(name);
})();
Run Code Online (Sandbox Code Playgroud)


Maa*_*eeb 5

使用 ES6+,您可以将代码编写为let nameconst name。这不会分配它或尝试覆盖window.name. 更多关于这里

let name = {};
name.FirstName = 'Tom';
alert(name.FirstName);
Run Code Online (Sandbox Code Playgroud)