[進階 js 03] == 和 === 的 special case


Posted by tzutzu858 on 2021-03-16

=== 會多判斷型態,可以複習 [ JavaScript 02 ] 變數

console.log( [] === [] )
console.log( {} === {} )

出來都會是 false
跟記憶體有關,可以回去看 [進階 js 02] 賦值


接下來要來講 ===== 的 special case

叫做 NaN (Not a Number)
但 Not a Number 還是一個 Number
如果用 console.log(typeof NaN)
出來是 number

什麼情形下會產生 NaN

首先來看把字串轉數字

var a = Number('101')
console.log(a)

// 出來會是數字的 101

上述沒有問題,但如果是下面程式碼便會出現 NaN

var a = Number('hello')
console.log(a)

// 出來會是 NaN

// 但如果 console.log(typeof a),依然會是 number

BUT

如果上述程式把 a 做判斷
console.log(a === a)
出來會是 false
怎麼會這樣呢?都是 number 阿,但出來是 false
這是個很特殊的規則

NaN 不等於任何東西,甚至是他自身

有人作一個網站 == (negated: !=)===== 的判別,去看 true or false

像是 == 的判別,滑鼠移到方格會跟你說這兩種判別是 true or false,很方便

=== 多判別型態,看起來比較單純
所以像陣列、NaN,因為只到不同記憶體位置,所以都是 false

以上兩張圖片皆來自 == (negated: !=)


那這樣要怎麼判別是不是 NaN

可以用 isNaN(a) 這個 function 來檢視他是不是 NaN
但這個方法在舊的瀏覽器不支援










Related Posts

6 React Hook:useRef

6 React Hook:useRef

筆記、advanced JS 整理

筆記、advanced JS 整理

AC S2-2 學期回顧

AC S2-2 學期回顧


Comments