Динамическое добавление числа в качестве свойства к существующему объекту

В 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, но хотелось бы получить лучшее понимание. Спасибо

1 ответ

Цифровой ключ на объектах всегда будет преобразован в строку. Это делается на шаге 6 алгоритма средства доступа к свойству ECMAScript ( §11.2.1).

Здесь уже был дан ответ

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

console.log(foo[4] === foo["4"]); // returns true
Другие вопросы по тегам