当前位置: 首页 > 知识库问答 >
问题:

为什么不能使用name作为变量/对象名?[重复]

淳于新
2023-03-14

声明这样的对象时:

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=…)都可以正常工作。为什么?

共有1个答案

邢炯
2023-03-14

之所以发生这种情况,是因为namewindow上的一个现有属性,其行为与普通变量略有不同。

无法替换此属性,只能为其指定字符串值。将其他类型指定给name属性时,它将转换为字符串:

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

这些行都将导致窗口具有一个属性名称,该属性包含“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));
})()
 类似资料:
  • 我希望将变量插入到对象键结构中,但我只得到变量名,而不是变量值。

  • 问题内容: 这些变量分配按预期工作: 但是,这些分配的行为不同: 为什么与示例不同,为什么相同?我如何在类示例中做类似的事情?也就是说,复制对象,然后更改它的一部分(那不会影响我借用属性的对象)吗? 问题答案: 我没有看到有人通过复制对象而不是仅仅为同一对象分配新的引用来提供有关如何使这两种情况相同的详细信息。 这将为您提供:

  • 问题内容: 我想使用变量的值来访问对象。 假设我有一个名为myobject的对象。 我想用此名称填充变量,然后使用该变量访问对象。 例: 问题答案: 全球: 全球:v2 本地:v1 本地:v2

  • 行为可以在这个小片段中看到(作为全局脚本执行): 该警报在Chrome中产生

  • 当我尝试这个代码时,我不能给对象中的“option\u code”一个常量。 我想要这样的结果(选项代码需要更改)= 这可能吗?