2016-01-27 7 views
0

В 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

точка синтаксис пути работает только по именам, которые начинаются с букв (или _) и содержать только '/ \ ш /' гольцов – dandavis

+0

Это необходимо, потому что '.' может быть неоднозначным. Допустим, у вас не было ни одного уровня, а два - теперь, что тогда будет «object.4.5»? Будет ли это свойство «первого уровня» с именем «4.5», или, возможно, это свойство с именем «4», которое само является объектом и имеет свойство с именем «5» под ним ...? – CBroe

ответ

1

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

Это уже ответил here

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^