3

求解析,a.b 和 a[b]都是获取对象属性的写法。但差异是:a[b]的b只能是字符串。
那下面的代码怎么解析呢 ,输出值为什么是345,345,333?

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]);
console.log(a[c]);
console.log(a[d]);

查看全部 5 个回答

1

JS普通对象的key只能是字符串,如果想使用变量作为key的话可以采用Map

var a = new Map;
var b = {key: 'b'};
var c = {key: 'c'};
var d = [3,5,6];
a.set(b, 123);
a.set(c, 345);
a.set(d, 333);
console.log(a.get(b)); 
console.log(a.get(c)); 
console.log(a.get(d));

推荐答案

3

已采纳

Object内置toString 和 valueOf 方法;
这种情况a[b] = 123 会默认调用对象的toString().
a[b] = 123就是a['[object Object]'] = 123
a[c]里面的对象c通向会调用toString() 也是a['[object Object]'] = 345;
而数组的toStirng() = '[object Array]';
最终a应该是{'[object Object]':345,'[object Array]':333};
ps:默认调用toString()是什么情况我要先查查先。
错了。。。。应该是a {'[object Object]':345,'3,5,6':333};