[JavaScript]我對 Object key 的錯誤認知

I do not know JS Object key YET

R4 Cheng
2 min readSep 17, 2022

我原本一直以為假若使用 Array 或者 Object 當作另一個 Object 的 key 時,會使用他們的 reference,直到我遇到了 bug 並且簡單做了測試

以下為測試的例子,使用的環境為 Node.js ,關注的焦點是 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 的結果

結論

  1. Object 會把所有的 key 的 type 都變成 string
  2. 若 key 是 Array 或者 Object ,他並不會使用他們的 reference
  3. 若使用 Array 當 key , Array 整體都會被當成 key
  4. 若使用 Object 當 key,所有的 key 都會變成 '[object Object]' ,並且都是同一個 key
  5. Object 不適合也不應該當 key,若需要 Object 當 key 時,可以考慮用 Map

跟 Leetcode 138 有關

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

R4 Cheng
R4 Cheng

Written by R4 Cheng

「0」が過去で「1」が未来「今」は何処にもない

No responses yet

Write a response