js 基础知识--对象

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,什么原理?

阅读 1.2k
2 个回答

你只需要将你上面代码加上console.log(a)输出就能明白了。

clipboard.png

也就是说整个对象变成了键
哪怕console.log(a[{}]),输出也是345

如果要正常输出,在赋值的时候加上引号就行。a['b']=123

一个对象的键值可以是一个字符串或者符号值(Symbol),如果当前的键值是对象,会通过toString把键值转换为字符串,所以上面的三个结果可以看成是如下:

a[b] = a['[object Object]']
a[c] = a['[object Object]']
a[d] = a['3,5,6']

所以a[b]的值会和a[c]的值一样。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题