Map是ECMA6中的新对象,如果为同一个键分配多个值,它将覆盖所有以前的值。例如,
'use strict';
var m = new Map();
m.set(['aaron', 100]);
m.set(['aaron', 100], 1);
m.set(['aaron', 100], 10);
m.set(['aaron', 100], 100);
m.set(['aaron', 100], 1000);
m.set(['aaron', 100], 10000);
console.log(m.get(['aaron', 100]));

它会显示一个奇怪的输出(未定义),为什么?非常感谢。
答案 0 :(得分:1)
<parameter name="datestart" class="java.sql.Date">
<defaultValueExpression><![CDATA[new java.sql.Date(new java.util.Date().getTime())]]></defaultValueExpression>
</parameter>
使用对数组的引用作为键,而不是数组的内容。
这个简单的比较表明,具有相同内容的数组不是相同的数组(具有不同的引用):
Map
如果您设置并获得相同的参考,它可以工作:
const a = ['aaron', 100];
const b = ['aaron', 100];
console.log(a === b);
答案 1 :(得分:1)
在JavaScript中,“数组”,“对象”或“函数”是“引用”类型,当您比较它们时,您实际上所做的是将引用与它们在内存中的位置进行比较,而不是它们的值。当它们都分配到不同的位置时,结果将返回“ false”。
您应该做的是将它们转换为原始类型。 JSON字符串,例如:
let a = {1: 'foo'},
b = {1: 'foo'};
console.log(a === b);
console.log(JSON.stringify(a) == JSON.stringify(b));