題目如下:
let a = {}
let b = { key:'b' }
let c = { key:'c' }
a[b]=123
a[c]=456
console.log(a[b])
前置知識:js對象屬性通過點(.)和方括號([])的不同之處:
- 點操作符: 靜態(tài)的母债。右側必須是一個以屬性名稱命名的簡單標識符祝钢。屬性名用一個標識符來表示没龙。標識符必須直接出現(xiàn)再js程序中言津。
- 中括號操作符: 動態(tài)的荣暮。方括號里必須是一個計算結果為字符串的表達式成畦,屬性名通過字符串表示距芬。字符串是js的數(shù)據(jù)類型。
-
[]
可以用變量作為屬性名,var a = 'name'; Obj[a]
-
[]
中括號可以用數(shù)字作為屬性名,Obj[1]
-
[]
可以動態(tài)訪問屬性名循帐,可以在程序運行時創(chuàng)建和修改屬性,var Obj = {}; var arr = ['上海','廣州','無錫']; for(var i=0; i<arr.length; i++){ Obj['address'+i]=arr[i] } console.log(Obj)
- 如果屬性名中包含會導致語法錯誤的字符框仔,或者屬性名是關鍵字或者保留字,也可以使用[]表示法拄养。
[hello world]
所以在執(zhí)行a[b]=123
和a[c]=456
的時候离斩,由于b和c都是對象银舱,要先轉換成字符串,
let b = { key:'b' }
b.toString() = "[object, Object]"
let c = { key:'c' }
c.toString() = "[object, Object]"
所以console.log(a['[object Object]']) // 456