Динамическое добавление числа в качестве свойства к существующему объекту
В 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