2016-09-20 3 views
1

Я читал вопросы JavaScript, где я нашел этот кусок кодаКак javascript добавить свойство к объекту?

var a={}, 
    b={key:'b'}, 
    c={key:'c'}; 

a[b] = 123; 
a[c] = 456; 

console.log(a[b]);  // o/p - 456 

кто-нибудь может заставить меня понять, почему этот код и как он печатает ?

И я думаю, что мы можем использовать точкуa.b = 123 и то есть строкуa['b'] = 123 подход, чтобы добавить свойство объекта.

+3

'b' является объектом, при использовании в качестве ключа преобразуется в строку как' [объект Object], 'c' снова объект, который будет преобразован в строку при использовании в качестве ключ. Это перезапишет предыдущее значение, таким образом, 456. – Tushar

+0

При использовании нотации обозначений точек и скобок с строкой вы фактически добавляете свойство 'b' на объект. – Tushar

ответ

3

Оба b и c разрешают эту же строку ([object Object]). Следовательно, вы переписываете один и тот же ключ.

И я думаю, что мы можем использовать точку a.b = т.е. 123 и строку [ «B»] = 123 подход добавить свойство к объекту.

Да, вы можете, но a['b'] очень отличается от a[b]. Первый разрешает ключ со строковым значением так же, как показывает ('b'), где, поскольку другой будет зависеть от строкового значения переменной b (в данном случае это [object Object]).

0

Для полноценного использования содержимого объекта вы можете использовать версию stringified.

var a = {}, 
 
    b = { key: 'b' }, 
 
    c = { key: 'c' }; 
 

 
a[JSON.stringify(b)] = 123; 
 
a[JSON.stringify(c)] = 456; 
 

 
console.log(a[JSON.stringify(b)]);

+0

и когда b или c изменения, это сломается ... – epascarello

+0

правый. это проблема с динамическими клавишами. –

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