[英]Why can't I check if an array is empty with array == []?
這是來自 CodeWars 的一個名為“正數計數/負數總和”的問題。 它說:
如果輸入數組為空或null,則返回一個空數組
為了檢查數組是否為空,我決定檢查它是否為空數組。 當我嘗試這樣做時:
if(input == [])
我沒有通過測試,但如果我這樣做:
if(input.length == 0)
我通過了測試。 一個空數組應該等於[]
對嗎? 為什么會有區別,這兩個檢查有什么區別?
我的代碼如下:
function countPositivesSumNegatives(input) {
var a = 0;
var b = 0;
if (input == null) {
return []
}
if (input.length == 0) {
return []
}
for (var i = 0; i < input.length; i++) {
if (input[i] > 0) {
a++;
}
if (input[i] < 0) {
b += input[i];
}
}
return [a, b]
}
問題是數組是對象。 比較兩個對象時,是在比較它們的引用。 根據MDN 文檔:
平等(==)
如果兩個操作數都是對象,那么當操作數引用內存中的同一個對象時,JavaScript 會比較相等的內部引用。
由於數組的兩個實例不一定具有相同的引用,因此檢查失敗。 只需在控制台中嘗試此操作:
> [] == []
false
看似具有相同內容(或缺少內容)的兩個數組並不相等。 那是因為沒有檢查內容,而是參考。 這兩個數組是獨立的實例並且引用內存中的不同位置,因此檢查評估為假。
另一方面,只檢查長度,如果它為零,則檢查數組是否為空。 length
屬性表示數組1中的內容量,並且是每個數組的一部分。 由於它是每個數組的一部分,並且反映了數組中的數據量,因此您可以使用它來檢查數組是否為空。
1不過,請注意RobG在評論中提到的稀疏數組。 這樣的數組可以用new Array(N)
創建,它會給你一個空數組,但長度為 N。
null 沒有長度
if (input === null || input.length === 0 ) {
return [];
}
int[] res2 = new int[] { };
if (input == null || input.Length == 0)
return res2;
此代碼將解決您的問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.