簡體   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