我正在尝试将我的代码更新到 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 中相等测试的第三种变体。)