JS中的NaN


JS 中的 NaN !== NaN

在控制台上執行下方代碼,不出意外的,結果打印了 NaN "!==" NaN

const param = 'abc'
if (parseInt(param) === NaN) {
  console.log(parseInt(param), '===', NaN)
} else {
  console.log(parseInt(param), '!==', NaN)
}

分析

NaN 是怎么出現的

  1. 數學運算符

在一般數學運算 + - * / 運算符執行過程中,js 會對參與計算的變量進行類型轉換,將其轉換為 Number 類型,如果轉換失敗,便會將其賦值為 NaN

  const a = 111 + 'a'
  a // NaN
  1. 強制類型轉換

JS 內置的數學方法,都會造成類型轉換,比如 parseInt,parseFloat,Number 等,當然 parseInt,parseFloatNumber 的區別在於前者只會將字符串開頭的整數或浮點數分解出來,轉換為整數或浮點數,后者會轉換全部內容

Number('111aaa')
parseInt('aaa111')
  1. 變量聲明賦值結果

這個沒什么說的,初始化變量就是這

const aaa = NaN

總結

從上面看,得出 NaN 的情況,除聲明賦值外,其實是變量類型轉換失敗的結果。而失敗的結果恰恰就是 我不知道這個結果是啥,反正不是數字 Not A Number,所以雖然 Js 數字運算將 NaN 賦值給了一個變量或者當成一個結果拋出,但表達的意思其實是描述性的,用於描述 aaa 並不是一個數字 Not A Number,那么不等式就有了合理的解釋了

const aaa = NaN // 描述性的賦值:'aaa' 不是一個數字
const bbb = NaN // 描述性的賦值:'bbb' 也不是一個數字
// 你沒法確定一個非數字是否等於另一個非數字
aaa === bbb // 所以結果就是false了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM