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

2024-03-28

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

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

它抛出这个错误:

Uncaught TypeError: name.fullName is not a function

但是,使用任何其他变量名称(例如var hello = ...)工作得很好。为什么?


发生这种情况是因为name是现有财产window https://developer.mozilla.org/en-US/docs/Web/API/Window/name,其行为与普通变量略有不同。

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

name = false;
var name = false;
window.name = false;

这些行都会导致window拥有财产name其中包含"false".

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

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

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

// In the global namespace, this will alert `"[object Object]"`
var name = { a: 1};
alert('Global `name`: \n' +
      JSON.stringify(name));

// In it's own namespace, this will alert `{"a":1}`.
(function(){
  var name = { a: 1};
  alert('Namespaced `name`: \n' +
        JSON.stringify(name));
})()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我不能使用“名称”作为变量/对象名称? [复制] 的相关文章

随机推荐