目錄
- 原因
- 運算式計算
- 型別轉換
- 總結
不知道這個小知識點用得多不多,曾經在書上看到過,所以有一些印象,前段時間順手寫出類似如下的代碼
var result;
if (parseInt('abc')==NaN) {
return "相等";
} else {
return "不等";
}
斷點除錯之后發現無論如何都不相等,方法parseInt()回傳的結果確實是NaN,但是與右側的NaN比較回傳的結果卻是false,這時候才突然想起來NaN有不等于自身的特性,所以簡單收集一下資料做個整理
原因
了解原因之前我們先明確一個問題,什么時候回出現NaN,理論上來說有兩種情況
- 運算式計算
- 型別轉換
我們逐個分析
運算式計算
當運算中使用了 + - * / 等運算子的時候,js會自動進行轉換,講參與計算的變數轉換成js的基本型別之一的Number型別,如果轉換失敗就會回傳NaN,比如說:
console.log(12 + 'a'); //NaN
型別轉換
比較典型的就是最初的例子里使用的parseInt(),除此之外還有parseFloat()和Number(),傳入一個非數變數結果就是NaN,很好理解,順便一提parse系列方法與Number()有些不同,
parseInt('123abc'); // 123
Number('123abc'); // NaN
總結
從上面兩種產生NaN的情況來看,NaN是一種例外的結果,也就是“not a number”,雖然它也是一個變數,但它是描述性變數,'a'不是一個數字(not a number),'b'也不是一個數字(not a number),但是'a'和'b'并不相等,所以NaN != NaN也就成立了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/177012.html
標籤:JavaScript
下一篇:Web前端JS實作輪播圖原理
