2015-12-05 7 views
1

Этот код:Почему объектные ключи преобразуются в «[object Object]»?

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

a[b] = 111; 
a[c] = 222; 

console.log(a[b]); 

Выходы: "222" (не "111").

Объяснение:

b и c оба будут преобразованы в "[объект Object]"

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

+0

Спасибо за аль ответы. Я, наконец, понимаю, почему. Существует три типа объектов: Object, Array, Date. Итак, «объект объекта» означает, что это «объект», а его тип - «объект». – NMSL

ответ

0

Здесь вы имеете в виду объекты a и b, но вместо возвращения вам весь объект со своими ключами и значениями вместо этого он возвращает вам строку - что говорит [object... - это объект ...Object] - тип объекта. Это может быть [object Function], [object Number] и т. Д. Итак, вы получаете два раза [object Object], поэтому вы переписываете ключ.

Если бы написать:

a[c] = 222; 
a[b] = 111; 

Выход будет: 111

+0

Не могли бы вы привести пример, когда мы используем [object Function] или [object Number]? Спасибо Рамзиддину. – NMSL

+0

var toString = Object.prototype.toString; –

+0

toString.call (123); toString.call (предупреждение); –

1

При использовании Object как ключ - Object (например b) преобразуется в StringtoString методом ключи всегда преобразуются в строки.), И тогда вы будете иметь только один ключ в объект a - это будет [object Object],

a['[object Object]'] = 111; 
a['[object Object]'] = 222; 

Вы должны установить уникальные ключи, как этот

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

 
a[b.key] = 111; 
 
a[c.key] = 222; 
 

 
console.log(a.b); 
 
console.log(a.c);

3

[object Object] - это просто строковое представление объекта, то есть результат вызова b.toString() или c.toString().

ключей Объектных всегда строки, так что, когда вы говорите:

a[b] 

JS найдет строковое представление b ([object Object]), и использовать его. То же самое с c.

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