鍍金池/ 問答/HTML5  HTML/ js面試題,求解析。越詳細(xì)越好

js面試題,求解析。越詳細(xì)越好

求解析,a.b 和 a[b]都是獲取對(duì)象屬性的寫法。但差異是: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]);

回答
編輯回答
尐飯團(tuán)

JS普通對(duì)象的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));

2017年9月17日 23:57
編輯回答
還吻

Object內(nèi)置toString 和 valueOf 方法;
這種情況a[b] = 123 會(huì)默認(rèn)調(diào)用對(duì)象的toString().
a[b] = 123就是a['[object Object]'] = 123
a[c]里面的對(duì)象c通向會(huì)調(diào)用toString() 也是a['[object Object]'] = 345;
而數(shù)組的toStirng() = '[object Array]';
最終a應(yīng)該是{'[object Object]':345,'[object Array]':333};
ps:默認(rèn)調(diào)用toString()是什么情況我要先查查先。
錯(cuò)了。。。。應(yīng)該是a {'[object Object]':345,'3,5,6':333};

2017年9月23日 02:51
編輯回答
不討囍

前面的大佬說的對(duì)

2018年6月11日 00:56
編輯回答
單眼皮

對(duì)象的key值是一個(gè)字符串,b與c都是一個(gè)對(duì)象,將他們作為a的key值會(huì)先轉(zhuǎn)化為字符串,對(duì)象轉(zhuǎn)化為字符串后是[object Object],所以a[b]=123就是a['[object Object]']=123,執(zhí)行a[c] = 345;的時(shí)候會(huì)把a(bǔ)['[object Object]']重新賦值為345,所以打印a[c]與a[d]就是對(duì)a['[object Object]']的取值,結(jié)果都是345

數(shù)組d轉(zhuǎn)化為字符串的結(jié)果是3,5,6,所以a[d] = 333;就是a['3,5,6'] = 333;,取值同理就是取a['3,5,6']的值

補(bǔ)充

es6中可作為對(duì)象屬性的Symbol類型

2017年6月25日 17:20
編輯回答
野橘

差異不是“b只能是字符串” 是b中不能有特殊字符,比如數(shù)字啊 “-” 啊

2017年8月8日 14:55