Javascript如何判斷一個值是不是NaN

問題由來:如何判斷一個函數的返回值是不是NaN?

NaN==NaN;                //false
Number.isNaN(NaN);       //treu
Object.is(NaN,NaN);      //true      

Object.is() 方法用來判斷兩個值是否是相同的值。

用法

Object.is(val1, val2);

Object.is() 判斷兩個值是否相同。如果下列任何一項成立,則兩個值相同:

  • 兩個值都是 undefined
  • 兩個值都是 null
  • 兩個值都是 true 或者都是 false
  • 兩個值是由相同個數的字符按照相同的順序組成的字符串
  • 兩個值指向同一個對象
  • 兩個值都是數字並且
    • 都是正零 +0, 或者一個爲+0,另一個爲0
    • 都是負零 -0
    • 都是 NaN
    • 都是除零和 NaN 外的其它同一個數字

這種相等性判斷邏輯和傳統的 == 運算不同,== 運算符會對它兩邊的操作數做隱式類型轉換(如果它們類型不同),然後才進行相等性比較,(所以纔會有類似 "" == false 等於 true 的現象),但 Object.is 不會做這種類型轉換。

這與 === 運算符的判定方式也不一樣。=== 運算符(和== 運算符)將數字值 -0 和 +0 視爲相等,並認爲 Number.NaN不等於 NaN。

例子

Object.is('foo', 'foo');     // true
Object.is(window, window);   // true

Object.is('foo', 'bar');     // false
Object.is([], []);           // false

var foo = { a: 1 };
var bar = { a: 1 };
Object.is(foo, foo);         // true
Object.is(foo, bar);         // false

Object.is(null, null);       // true

// 特例
Object.is(0, -0);            // false
Object.is(0, +0);            // true
Object.is(-0, -0);           // true
Object.is(+0,-0);            //false
Object.is(NaN, 0/0);         // true
Object.is(NaN, 1/0);         // false

參考自MDN

發佈了72 篇原創文章 · 獲贊 49 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章