[JavaScript] 我對 Object key 的錯誤認知
I do not know JS Object key YET
我原本一直以為假若使用 Array 或者 Object 當作另一個 Object 的 key 時,會使用他們的 reference,直到我遇到了 bug 並且簡單做了測試
以下為測試的例子,使用的環境為 Nodejs
,關注的焦點是 Object 被當作 key 時的情況
// Case Array const arr1 = [1, 3]; const arr2 = [2, 4]; const obj1 = {}; obj1[arr1] = 3; obj1[arr2] = 4; console.log(obj1); // { '1,3': 3, '2,4': 4 } // Case Object const keyObj1 = { a: 3 }; const keyObj2 = { b: 4 }; const obj2 = {}; obj2[keyObj1] = 3; obj2[keyObj2] = 4; // !! issue happened console.log(obj2); // { '[object Object]': 4 }
從上面的例子可以知道,不論是 Array 或者 Object 都不會使用各自的 reference 當作 key 。 Array 的值會整個被拿來使用,Object 則會變成 [object Object]
請觀察 Case Object :當將 4
assign 至 obj2[keyObj2]
時,由於 key 都是一樣的 '[object Object]'
所以會直接將上一行的 assign 給蓋掉,於是在 obj2 中,將會只有最後一次 assign 的結果
結論
- Object 會把所有的 key 的 type 都變成 string
- 若 key 是 Array 或者 Object ,他並不會使用他們的 reference
- 若使用 Array 當 key , Array 整體都會被當成 key
- 若使用 Object 當 key,所有的 key 都會變成
'[object Object]'
,並且都是同一個 key - Object 不適合也不應該當 key,若需要 Object 當 key 時,可以考慮用 Map
跟 Leetcode 138 有關