Javascript 为什么相同的数组不相等?
e、 g 如果我错误地使用了“相同”和“等效”,请道歉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],您创建了另一个数组,得到了一个完全不同的引用,一个指向内存中完全不同位置的指针。在这两种情况下创建的数组都包含相同的元
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)