JS 中的 NaN !== NaN
在控制台上執行下方代碼,不出意外的,結果打印了
NaN "!==" NaN
const param = 'abc'
if (parseInt(param) === NaN) {
console.log(parseInt(param), '===', NaN)
} else {
console.log(parseInt(param), '!==', NaN)
}
分析
NaN 是怎么出現的
- 數學運算符
在一般數學運算 + - * / 運算符執行過程中,js 會對參與計算的變量進行類型轉換,將其轉換為
Number類型,如果轉換失敗,便會將其賦值為NaN
const a = 111 + 'a'
a // NaN
- 強制類型轉換
JS 內置的數學方法,都會造成類型轉換,比如
parseInt,parseFloat,Number等,當然parseInt,parseFloat和Number的區別在於前者只會將字符串開頭的整數或浮點數分解出來,轉換為整數或浮點數,后者會轉換全部內容
Number('111aaa')
parseInt('aaa111')
- 變量聲明賦值結果
這個沒什么說的,初始化變量就是這
const aaa = NaN
總結
從上面看,得出
NaN的情況,除聲明賦值外,其實是變量類型轉換失敗的結果。而失敗的結果恰恰就是我不知道這個結果是啥,反正不是數字 Not A Number,所以雖然 Js 數字運算將NaN賦值給了一個變量或者當成一個結果拋出,但表達的意思其實是描述性的,用於描述aaa並不是一個數字Not A Number,那么不等式就有了合理的解釋了
const aaa = NaN // 描述性的賦值:'aaa' 不是一個數字
const bbb = NaN // 描述性的賦值:'bbb' 也不是一個數字
// 你沒法確定一個非數字是否等於另一個非數字
aaa === bbb // 所以結果就是false了
