NaN

目錄函數

  1. isNaN
  2. Number.isNaN
  3. (NaN != NaN)
  4. Object.prototype.toString.call

NaN == NaN NaN === NaN // falseprototype

[NaN ].includes(NaN ) // truecode

isNaN

若是傳入的參數不是Number類型,會先調用Number方法 轉換爲Number類型ip

isNaN(NaN);       // true
isNaN(undefined); // true
isNaN({});        // true

isNaN([])         // false
isNaN(['1234.23'])  // false
isNaN(true);      // false
isNaN(null);      // false
isNaN(37);        // false

// strings
isNaN("37");      // false: 能夠被轉換成數值37
isNaN("37.37");   // false: 能夠被轉換成數值37.37
isNaN("37,5");    // true
isNaN('123ABC');  // true:  parseInt("123ABC")的結果是 123, 可是Number("123ABC")結果是 NaN
isNaN("");        // false: 空字符串被轉換成0
isNaN(" ");       // false: 包含空格的字符串被轉換成0

// dates
isNaN(new Date());                // false
isNaN(new Date().toString());     // true

isNaN("blabla")   // true: "blabla"不能轉換成數值
                  // 轉換成數值失敗, 返回NaN

Number.isNaN

NaN的加強版本,和全局函數 isNaN() 相比,該方法不會強制將參數轉換成數字,只有在參數是真正的數字類型,且值爲 NaN 的時候纔會返回 true字符串

Number.isNaN(NaN);        // true
Number.isNaN(Number.NaN); // true
Number.isNaN(0 / 0)       // true

// 下面這幾個若是使用全局的 isNaN() 時,會返回 true。
Number.isNaN("NaN");      // false,字符串 "NaN" 不會被隱式轉換成數字 NaN。
Number.isNaN(undefined);  // false
Number.isNaN({});         // false
Number.isNaN("blabla");   // false

// 下面的都返回 false
Number.isNaN(true);
Number.isNaN(null);
Number.isNaN(37);
Number.isNaN("37");
Number.isNaN("37.37");
Number.isNaN("");
Number.isNaN(" ");

參考:get

相關文章
相關標籤/搜索