javascript - 动态地将数字添加为现有对象的属性

标签 javascript object dot-operator

在 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 是原始类型有关,但希望得到更好的理解。谢谢

最佳答案

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

这个问题已经得到解答 here

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

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

关于javascript - 动态地将数字添加为现有对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35043977/

相关文章:

javascript - 存储包含 html 标签的文本

javascript - 如何使用 Nodemailer 发送保存在 s3 上的 pdf 作为附件

javascript - 获取json数据的长度

javascript - 使用 Object.hasOwnProperty 与测试属性是否未定义的好处

c++ - 点运算符成本 c/c++

java - 为什么不能取消引用 lambda 表达式?

java - Java 是否隐式地将构造函数(或对象)与 new 运算符一起使用?

javascript - 内联行编辑的 onSuccess 事件未触发

javascript - 从链接集合中获取 Href

javascript - 如何在nodejs中添加新 key 后复制2个对象