繁体   English   中英

在php和javascript中比较数组会返回2个不同的值。 为什么?

[英]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运算符。 他们可以检查:

  • $ a + $ b联合$ a和$ b的联合。
  • $ a == $ b相等如果$ a和$ b具有相同的键/值对,则为TRUE。
  • $ a === $ b身份如果$ a和$ b具有相同顺序的相同键/值对和相同类型,则为TRUE。
  • $ a!= $ b不等式如果$ a不等于$ b,则为TRUE。
  • $ a <> $ b不等式如果$ a不等于$ b,则为TRUE。
  • $ a!== $ b非同一性如果$ a与$ b不同,则为TRUE。

因此,在javascript中错误的 ,因为运算符==检查Array对象的instance是否具有对另一个对象的相同reference

这在PHP中正确的 ,因为数组有extra operators ,并且==运算符检查两个不同的数组是否具有相同的对值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM