为什么我不能使用“名称”作为变量/对象名称?

jam*_*man 4 javascript

当像这样声明一个对象时:

var name= {
    firsName:"nur",
    lastName:"jaman",
    fullName: function() {
        return this.firsName + " " + this.lastName;
    }
}
console.log(name.fullName());
Run Code Online (Sandbox Code Playgroud)

它抛出这个错误:

Uncaught TypeError: name.fullName is not a function
Run Code Online (Sandbox Code Playgroud)

但是,使用任何其他变量名称(例如var hello = ...)都可以。为什么?

Cer*_*rus 5

发生这种情况是因为name是 的现有属性window,其行为与普通变量略有不同。

您无法替换此属性,只能为其分配字符串值。当将其他类型分配给 name 属性时,它会被强制转换为字符串:

name = false;
var name = false;
window.name = false;
Run Code Online (Sandbox Code Playgroud)

这些行都将导致具有包含 的window属性。name"false"

以类似的方式,保存到name变量的对象和函数将被转换为字符串:

var name = function(){};  // "function (){}"
var name = { a: [1, 2] }; // "[object Object]"
Run Code Online (Sandbox Code Playgroud)

如果您想使用名为“name”的变量,则必须将其括在一个范围内:

name = false;
var name = false;
window.name = false;
Run Code Online (Sandbox Code Playgroud)