不调用 map.set() 的 es6 地图设置

es6 maps setting without invoking map.set()

我想要这个地图功能的解释:

 let m = new Map().set('items', ["a", "b", "c"]);

 console.log(m.get('items')); // ["a", "b", "c"]

 let n = m.get('items');

 console.log(n); // ["a", "b", "c"]

 n.push("d");

 console.log(n); // ["a", "b", "c", "d"]

 console.log(m.get('items')); // ["a", "b", "c", "d"]

如何在不调用 Map.set() 的情况下将值 'd' 添加到地图 m?

因为 n 变量存储对存储在 m 映射中的数组的引用(不是它的副本) - 所以 n 变量存储常规数组,当然有 push 方法和 m Map 存储对同一数组的引用,因此它可以看到更新的数组。所以 n 变量和 map items 条目共享对同一个数组的引用。请注意,这是所有 JS 引用类型的典型行为。如果 m 映射原始类型(例如字符串)的存储值,您必须使用 set 在您的地图中更新它。

只有一个数组,当 m.get('items') 为 运行 时不会克隆它,而是提供对数组的引用。

您可以通过执行以下操作来确认这一点:

n === m.get('items') // returns true

反之,两个数组即使什么都不包含也不相等。例如:

[] === [] // returns false

太棒了,我不知道这种行为,但它是有道理的。不错!