===
會多判斷型態,可以複習 [ 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
但這個方法在舊的瀏覽器不支援