【问题标题】:dynamically adding a number as a property to an existing object动态地将数字作为属性添加到现有对象
【发布时间】:2016-05-04 19:04:51
【问题描述】:

在 JavaScript 中,当像这样向现有对象添加属性时:

var qBacks = {
  12: "Namath",
  16: "Montana",
  19: "Unitas"
};

qBacks["4"] = "Brett Favre"; //Will work!
qBacks.4 = "Brett Favre"; //Will not work!
//but
qBacks.player4 = "Brett Favre"//Will work.

而且,如果我想附加属性 4 来删除名字,我必须使用括号符号来完成:

qBacks[4] = "Farve"; //Works!
qBacks.4 = "Farve"; //Will not work!

为什么点运算符不使用数字来动态添加属性或修改值?我猜这与 typeof 4 是原始的有关,但希望得到更好的理解。谢谢

【问题讨论】:

  • 点路径语法仅适用于以字母(或_)开头且仅包含/\w/ 字符的名称
  • 这是必要的,因为. 可能不明确。假设您没有一层,而是两层——那么object.4.5 会解决什么问题?它会是一个名为4.5 的“一级”属性,还是一个名为4 的属性,它本身就是一个对象,并且在它下面有一个名为5 的属性......?

标签: javascript object dot-operator


【解决方案1】:

对象上的数字键将始终转换为字符串。这是在 ECMAScript 属性访问器 (§11.2.1) 算法的第 6 步中完成的。

这已经回答here

var foo = {};
foo[4] = 'bar';

console.log(foo[4] === foo["4"]); // returns true

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    相关资源
    最近更新 更多