[英]comparing arrays in php and in javascript return 2 different values. Why?
伙计们真的很困扰我。
在JavaScript中-数组是对象,这意味着每个数组都为该数据类型分配了一块内存。
所以这在什么时候有意义
arr1 = [1,2,3]
arr2 = [1,2,3]
arr1 == arr2 returns false
然而
在php中,相同的情况返回true。
为什么会这样。
这就是在Javascript中返回false的原因:
创建这两个数组时:
arr1 = [1,2,3];
arr2 = [1,2,3];
实例化2个不同的Array对象, 请参见Array参考 。 因此,即使它们具有相同的元素,它们也不是同一对象,所以它返回false。
如果仅创建一个对象,然后将reference
复制到另一个变量,例如:
var arr1 = [1,2,3];
var arr2 = arr1
(arr1 == arr2) //returns true
它会返回true,因为它们具有对同一对象([1,2,3])的引用。
我认为您熟悉OO,如果不是这样,请看一下: 面向对象编程
因此,如果需要比较同一索引中数组的每个元素是否等于另一个元素,则可以使用@Prafulla Kumas Sahu提到的本机函数every()
。 每个文档 。
这是一个朴素的示例,说明如何使用every()
比较两个数组是否具有相同的元素:
var arr1 = [1,2,3];
var arr2 = [1,2,3];
arr1.every(function(value, index){
return value == arr2[index];
});
//returns true
在PHP中,PHP语言php docs提供了数组的其他native
运算符。 他们可以检查:
因此,在javascript中是错误的 ,因为运算符==检查Array对象的instance
是否具有对另一个对象的相同reference
。
这在PHP中是正确的 ,因为数组有extra operators
,并且==运算符检查两个不同的数组是否具有相同的对值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.