簡體   English   中英

為什么我不能使用 array == [] 檢查數組是否為空?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM