Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么相同的数组不相等?_Javascript_Arrays_Comparison_Operators - Fatal编程技术网

Javascript 为什么相同的数组不相等?

Javascript 为什么相同的数组不相等?,javascript,arrays,comparison,operators,Javascript,Arrays,Comparison,Operators,e、 g 如果我错误地使用了“相同”和“等效”,请道歉 console.log([1,2,3]=[1,2,3])它们在内存中是不同的位置。它们是两个完全不同的数组,恰好具有相同的值 这就像说A和B两个人都带着3个苹果,他们是同一个人吗?人员A不能是人员B。此[1,2,3]是数组对象。当你创建它时,你会得到这个数组的一个引用,一个指向内存中某个位置的指针。通过调用[1,2,3],您创建了另一个数组,得到了一个完全不同的引用,一个指向内存中完全不同位置的指针。在这两种情况下创建的数组都包含相同的元

e、 g

如果我错误地使用了“相同”和“等效”,请道歉


console.log([1,2,3]=[1,2,3])它们在内存中是不同的位置。它们是两个完全不同的数组,恰好具有相同的值


这就像说A和B两个人都带着3个苹果,他们是同一个人吗?人员A不能是人员B。

此[1,2,3]是数组对象。当你创建它时,你会得到这个数组的一个引用,一个指向内存中某个位置的指针。通过调用[1,2,3],您创建了另一个数组,得到了一个完全不同的引用,一个指向内存中完全不同位置的指针。在这两种情况下创建的数组都包含相同的元素,为它们的创建保留了相同的内存量,但它们实际上是两个完全不同的对象

两个对象之间的相等性基于比较它们的引用,如果它们相同,则引用指向同一个对象,因此
==
运算符的计算结果为
true
。否则为
false

正如更为正式的陈述:

相等(=)

如果操作数不属于同一类型,则相等运算符将转换操作数,然后应用严格比较。如果 两个操作数都是对象,然后JavaScript比较操作数引用中相同对象时相等的内部引用 记忆


因为虽然它们可能有相同的内容,但它们并不指向内存中相同的引用

为了获得更高的精度,请想象以下示例

$  node
> [1, 2, 3] == [1, 2, 3]
false
这是有道理的,因为这两个数组是不同的对象,即使它们具有相似的值,例如如果我们这样做的话

let arr1 = [1,2,3]
let arr2 = [1,2,3]
arr1 == arr2 //false
只有arr1会改变


如果您正在寻找比较数组的解决方案,您可能会发现它很有用

谢谢-我必须阅读文档才能更好地理解JS的
==
与其他语言相比的
==
arr1.push(4)