【前端100問】Q76:輸出以下代碼運行結果

寫在前面

此係列來源於開源項目:前端 100 問:能搞懂 80%的請把簡歷給我
爲了備戰 2021 春招
每天一題,督促自己
從多方面多角度總結答案,豐富知識
輸出以下代碼運行結果
簡書整合地址:前端 100 問

正文回答

題目
// example 1
var a={}, b='123', c=123;
a[b]='b';
a[c]='c';
console.log(a[b]);

// example 2
var a={}, b=Symbol('123'), c=Symbol('123');
a[b]='b';
a[c]='c';
console.log(a[b]);

// example 3
var a={}, b={key:'123'}, c={key:'456'};
a[b]='b';
a[c]='c';
console.log(a[b]);

這題考察的是對象的鍵名的轉換。

  • 對象的鍵名只能是 StringSymbol 類型。
  • 其他類型的鍵名會被轉換成 String 類型。
  • 對象轉字符串默認會調用 toString 方法。
// example 1
var a={}, b='123', c=123;
a[b]='b';

// c 的鍵名會被轉換成字符串'123',這裏會把 b 覆蓋掉。
a[c]='c';  

// 輸出 c
console.log(a[b]);
// example 2
var a={}, b=Symbol('123'), c=Symbol('123');  

// b 是 Symbol 類型,不需要轉換。
a[b]='b';

// c 是 Symbol 類型,不需要轉換。任何一個 Symbol 類型的值都是不相等的,所以不會覆蓋掉 b。
a[c]='c';

// 輸出 b
console.log(a[b]);
// example 3
var a={}, b={key:'123'}, c={key:'456'};  

// b 不是字符串也不是 Symbol 類型,需要轉換成字符串。
// 對象類型會調用 toString 方法轉換成字符串 [object Object]。
a[b]='b';

// c 不是字符串也不是 Symbol 類型,需要轉換成字符串。
// 對象類型會調用 toString 方法轉換成字符串 [object Object]。這裏會把 b 覆蓋掉。
a[c]='c';  

// 輸出 c
console.log(a[b]);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章