如何在 JavaScript 陣列中檢查 NaN 關鍵字是否存在


我們有一個包含真值和假值的元素陣列。我們的任務是編寫一個函式,該函式返回一個數組,其中包含原始陣列中所有 NaN 元素的索引。

NaN !== NaN

NaN 的資料型別實際上是數字。儘管 NaN 是一個假值,但它具有其他任何資料型別或變數都不具有的特殊屬性。那就是表示式 NaN === NaN 返回 false。並且只有在 NaN 的情況下才會返回 false。

因此,我們可以利用這種特性來選擇 NaN 值的索引。程式碼如下:

const arr = [7, 1, "123abc", undefined, NaN, 78, NaN, null, "aes", NaN,
'', null, NaN];
const pickNaN = (arr) => {
   return arr.reduce((acc, val, ind) => {
      if(val !== val){
         acc.push(ind);
      };
      return acc;
   }, []);
};
console.log(pickNaN(arr));

使用 isNaN() / Number.isNaN()

isNaN() 函式根據提供的值是否為 NaN 或是否可以強制轉換為 NaN 返回 true 或 false。而 Number.isNaN() 函式僅在提供的值實際上是 NaN 時才返回 true。

因此,與 isNaN() 相比,Number.isNaN() 是檢查 NaN 的可靠方法。程式碼輸出的差異如下所示。

示例

const arr = [7, 1, "abc", undefined, NaN, 78, NaN, null, "aes", NaN, '',
null, NaN];
const pickNaN = (arr) => {
   return arr.reduce((acc, val, ind) => {
      if(Number.isNaN(val)){
         acc.reliableWay.push(ind);
      };
      if(isNaN(val)){
         acc.unreliableWay.push(ind);
      }
      return acc;
   }, {
      reliableWay: [],
      unreliableWay: []
   });
};
console.log(pickNaN(arr));

此程式碼準備了兩個陣列,一個使用 Number.isNaN(),另一個使用 isNaN()。

輸出

輸出將是:

{
   reliableWay: [ 4, 6, 9, 12 ],
   unreliableWay: [ 2, 3, 4, 6, 8, 9, 12]
}

我們可以清楚地看到 isNaN() 如何將許多非 NaN 值計算為 NaN。這就是 Number.isNaN() 成為更可靠方法的原因。

更新於: 2020-08-21

948 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.