比较php和javascript中的数组会返回两个不同的值。为什么?
伙计们,有件事真的困扰着我 在JavaScript中,数组是对象,这意味着每个数组都为该数据类型分配了一段内存 因此,当比较php和javascript中的数组会返回两个不同的值。为什么?,javascript,php,arrays,Javascript,Php,Arrays,伙计们,有件事真的困扰着我 在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个不同的数组对象。因此,即使它们具有相同的元素,它
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个不同的数组对象。因此,即使它们具有相同的元素,它们也不是相同的对象,因此返回false
如果只创建一个对象并将引用
复制到另一个变量,如下所示:
var arr1 = [1,2,3];
var arr2 = arr1
(arr1 == arr2) //returns true
它将返回true,因为它们对同一对象([1,2,3])有引用
我认为您对O.O.很熟悉,如果不是这样,请看一下:
因此,如果需要比较数组中的每个元素是否等于同一索引中的另一个元素,请使用@Prafulla Kumas Sahu提到的本机函数every()
下面是一个简单的示例,说明如何使用every()
比较两个数组是否具有相同的元素:
在PHP中,对于PHP语言中的数组,有额外的native
运算符。他们可以检查:
- $a+$b由$a和$b组成的联合体
- 如果$a和$b具有相同的键/值对,则$a==$b相等TRUE
- 如果$a和$b具有相同顺序和相同类型的相同键/值对,则$a====$b标识为TRUE
- $a!=$如果$a不等于$b,则b不相等为真
- 如果$a不等于$b,则$a$b不平等为真
- $a!==$b如果$a与$b不相同,则为非标识TRUE
实例是否对另一个对象具有相同的引用
在PHP中是true,因为数组有额外的操作符,操作符==检查两个不同的数组是否有相同的对值。和===将变量视为字符串,因此通过执行$ar1.toString()==$ar2.toString(),您可以在js中对其进行比较。如果元素的顺序不一样,它将无法工作。当您在js中比较两个数组时,您可以使用它来解决此问题。这是一个非常好的解释,谢谢@tfidelis,但我认为OP理解这一点,但是PHP呢?PHP也是这样吗?如果是,为什么PHP在相同的场景中返回true?感谢您的解释。但问题是,为什么在PHP中比较两个对象数组时返回值为真?或者在PHP中,它们不是对象数组,而是基本值。。嗯…@johnbrian你是对的,我将编辑答案并告诉你为什么在php中是正确的。那么所有语言中的数组都是对象数组?它们不是原始数据类型,对吗?是的,每种语言都以自己的方式实现。有自己的处理方法、操作符等。数组的概念是相同的。
var arr1 = [1,2,3];
var arr2 = [1,2,3];
arr1.every(function(value, index){
return value == arr2[index];
});
//returns true