iT邦幫忙

1

【JavaScript】很適合今天的NaN

  • 分享至 

  • xImage
  •  

【前言】
本系列為個人前端學習之路的學習筆記,在過往的學習過程中累積了很多筆記,如今想藉著IT邦幫忙這個平台做整理+再複習。
本系列標題一律以【】標示該篇文章主要涉及的內容,例如【JavaScript】、【Vue】等等。
若內容有誤,還麻煩各路大神不吝於點出問題,感激不敬。


NaN是什麼?

根據MDN的文件
NaN用以表示「非數值」,聽起來有點難懂,英文的話可能比較好理解,就是Not-A-Number

一般來說我們不太常會用到NaN,而是在計算的過程中得到NaN
例如:

console.log( "字串" * 3 ); //NaN

在一些計算過程,例如加減乘除,或是Math 函式.......之類的過程中
如果我們錯誤的輸入了不能被計算的值,想當然也根本算不出結果,這時為了告訴你「你算出來的東西不是數字」,就會回傳NaN(Not-A-Number)

typeof NaN

彷彿愚人節玩笑一樣,當你typeof NaN時,會得到number

console.log( typeof NaN); //number

判斷是否為NaN的陷阱

通常我們會避免出現NaN
會寫一些判斷式來做檢查,但是要小心

let a = "字串" * 5;
if(a === NaN){
    console.log("算錯了");
}else{
    console.log("正確");
}
//正確

以這個案例來說,當我們慣性的以===進行判斷時,居然會發現NaN === NaN是false
如同typeof NaN是number一樣令人驚訝

實際上,NaN不等於(==、!=、===、!==)任何值,包括 NaN 本身
所以要判斷是否為NaN要使用isNaN()Number.isNaN()

let a = "字串" * 5;
console.log(isNaN(a)); //true

isNaN()會把參數轉成數字,再判斷其是否為NaN,因此偶爾還是會出現一些這樣的狀況:

console.log(isNaN("")); //false

因為空字串被強硬轉成數字,變成0,然而0是數字,因此結果就變成false了
但明明空字串就不是一個數字


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言