我正在嘗試將我的程式碼更新到 ES6,因為我正在使用 Node 4.0 並且到目前為止非常喜歡它的功能。但是,我對新的 ES6 Map
資料結構有問題,因為當使用 Array
作為鍵時,它的行為與 {}
不同。我用它作為計數器地圖。
我運行此程式碼,我想知道如何使用數組作為 Map
的鍵。
"use strict"; var a = new Map(); a.set(['x','y'], 1); console.log(a.get(['x','y'])); var b = {}; b[['x','y']] = 1; console.log(b[['x','y']]);
它會印出以下內容,第一行應該是 1
而不是 undefined
:
undefined 1
原始的 JS 映射對金鑰進行字串化,我不想使用新的 ES6 Map
進行相同類型的字串化 hack。
如何可靠地使用陣列作為 ES6 Map
的鍵?
您需要儲存對用作鍵的
Array
的非原始實例的參考。請注意以下兩個範例中的差異:了解 ES2015 Map 鍵的比較(幾乎)就像與
===
運算子一樣。兩個陣列實例,即使它們包含相同的值,也不會以===
的方式相互比較。試試這個:
由於 Map 類別旨在用作基底類,因此您也許可以使用重寫的
.get()
函數來實作子類別。(第一句中的「幾乎」是反映Map鍵相等性比較是透過
Object.is()
完成的,這在日常編碼中很少出現。本質上是JavaScript 中相等測試的第三種變體。)