var a = {};
var b = {key: 'b'};
var c = {key: 'c'};
var d = [3,5,6];
a[b] = 123;
a[c] = 345;
a[d] = 333;
console.log(a[b]); // 345
console.log(a[c]); // 345
console.log(a[d]); // 333
为什么a[b] 和 a[c]都输出345,什么原理?
var a = {};
var b = {key: 'b'};
var c = {key: 'c'};
var d = [3,5,6];
a[b] = 123;
a[c] = 345;
a[d] = 333;
console.log(a[b]); // 345
console.log(a[c]); // 345
console.log(a[d]); // 333
为什么a[b] 和 a[c]都输出345,什么原理?
一个对象的键值可以是一个字符串或者符号值(Symbol),如果当前的键值是对象,会通过toString把键值转换为字符串,所以上面的三个结果可以看成是如下:
a[b] = a['[object Object]']
a[c] = a['[object Object]']
a[d] = a['3,5,6']
所以a[b]
的值会和a[c]
的值一样。
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
你只需要将你上面代码加上console.log(a)输出就能明白了。
也就是说整个对象变成了键
哪怕console.log(a[{}]),输出也是345
如果要正常输出,在赋值的时候加上引号就行。a['b']=123