不调用 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
太棒了,我不知道这种行为,但它是有道理的。不错!
我想要这个地图功能的解释:
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
太棒了,我不知道这种行为,但它是有道理的。不错!