[英]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.