[進階 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

健保卡讀取程式 (console app sample)

健保卡讀取程式 (console app sample)

JS30 Day 13 筆記

JS30 Day 13 筆記

JS30 Day 30 筆記

JS30 Day 30 筆記


Comments