Javascript 为什么在不同的对象中使用相同的函数return映射数组?

Javascript 为什么在不同的对象中使用相同的函数return映射数组?,javascript,dictionary,equality,Javascript,Dictionary,Equality,我想知道为什么v.map(…)不等于v.map(…),使用相同的函数进行映射 var v = [1,2,3,4,5] v.map(function(a) {return a+1}) === v.map(function(a) { return a+1;}) 在节点repl上运行这个函数,第二个表达式的结果为false,这是因为在Javascript中数组是通过引用而不是通过值进行比较的 换句话说,做一些像 [1,2] === [1,2]; 在Javascript中返回false,因为这两个

我想知道为什么v.map(…)不等于v.map(…),使用相同的函数进行映射

var v = [1,2,3,4,5]
v.map(function(a) {return a+1}) === v.map(function(a) { return a+1;}) 

在节点repl上运行这个函数,第二个表达式的结果为false,这是因为在Javascript中数组是通过引用而不是通过值进行比较的

换句话说,做一些像

[1,2] === [1,2];
在Javascript中返回
false
,因为这两个数组在内存中占据不同的位置。它们没有按照实际内容进行比较(我们称之为价值比较)

相反,做

var x = [1,2];
x === x;
返回
true
。在这种情况下,变量
x
引用(解析为数组的内存位置)到同一个数组,并且对内存位置的这个公共引用足以产生
true


map()
返回一个数组。这是因为在Javascript中,数组是通过引用而不是通过值进行比较的

换句话说,做一些像

[1,2] === [1,2];
在Javascript中返回
false
,因为这两个数组在内存中占据不同的位置。它们没有按照实际内容进行比较(我们称之为价值比较)

相反,做

var x = [1,2];
x === x;
返回
true
。在这种情况下,变量
x
引用(解析为数组的内存位置)到同一个数组,并且对内存位置的这个公共引用足以产生
true


map()
返回一个数组。通过值比较两个数组是。

当比较非原语的相等性时,Javascript通过引用的相等性检查相等性-也就是说,两个被测试的对象是否都引用内存中的相同对象

在这种情况下,它们不会-
.map
返回一个新对象,在同一数组上运行两次不同的
.map
将返回两个不同的引用,而不管在映射时进行了什么计算

总而言之:

v===v
为真,因为v表示内存中的同一对象
[1,2,3,4,5]=[1,2,3,4,5]
为false,因为两个数组都是内存中的不同对象(即比较的是引用,而不是值)
.map
将始终返回一个数组的新实例-因此结果不能等于另一个
.map
语句

在比较非原语的相等性时,Javascript会按引用的相等性检查相等性-也就是说,两个被测试的对象是否都引用了内存中的同一对象

在这种情况下,它们不会-
.map
返回一个新对象,在同一数组上运行两次不同的
.map
将返回两个不同的引用,而不管在映射时进行了什么计算

总而言之:

v===v
为真,因为v表示内存中的同一对象
[1,2,3,4,5]=[1,2,3,4,5]
为false,因为两个数组都是内存中的不同对象(即比较的是引用,而不是值)
.map
将始终返回数组的新实例-因此结果不能等于另一个
。map
语句将根据对象的身份而不是相似性来比较对象。并且,
.map()
每次调用时都返回一个具有自己标识的
数组的独特实例。此外,可能相关的:“对象”是通过它们的身份而不是它们的相似性进行比较的。并且,
.map()
每次调用时都返回一个具有自己标识的
数组的独特实例。也可能是相关的:“