1. isNaN() 存在的意義 由於 NaN 是唯一一個不等於自身的值,不像其他的值,可以用相等操作符來判斷是否等於自身, 和`NaN === NaN false isNaN()`就誕生了,那它到底起著怎樣的作用呢,且看下文。 2. isNaN() 判斷的原理 函數接受一個參數,原理是先嘗試將參數 ...
1. isNaN() 存在的意義
由於 NaN 是唯一一個不等於自身的值,不像其他的值,可以用相等操作符來判斷是否等於自身,NaN == NaN
和NaN === NaN
都會返回false
,所以isNaN()
就誕生了,那它到底起著怎樣的作用呢,且看下文。
2. isNaN() 判斷的原理
isNaN
函數接受一個參數,原理是先嘗試將參數轉換為數值型,調用的是Number()
方法,再進行判斷。
說到這裡就有必要介紹一下Number()
方法了,其實Number()
方法的原理也有點複雜,具體分兩種情況。
Number()
方法也接受一個參數:
一、 參數為原始數據類型
原始數據類型有:數值、字元串、布爾值、undefined、null
先對參數調用valueOf
方法,再用Number()
方法進行判斷
//1. 數值:自然轉為數值
//2. 字元串
Number('123') // 123
Number('123abc') // NaN
Number(' ') // 0
// 3. 布爾值
Number(true) // 1
Number(false) // 0
// 4. undefined
Number(undefined) // NaN
//5. null
Number(null) // 0
二、參數為對象
先對參數調用valueOf
方法,再對參數調用toString()
方法,最後用Number()
方法進行判斷。
參數為對象時返回的是NaN
,除非參數是包含單個數值的數組(數組也是對象)
Number({a:1}) // NaN
Number([1, 2, 3]) // NaN
Number([1]) // 1
介紹完Number()
方法的原理之後,就可以很好地知道isNaN()
判斷的結果了。
3. 什麼時候返回 true ,什麼時候返回 false
返回 true: NaN
、對象(除包含單個數值的數組)、undefined、不能用Number()
方法轉為數值型的字元串
返回false: 數值、null
、布爾值、能用Number()
方法轉為數值型的字元串、包含單個數值的數組
4. isNaN() 的作用
根據isNaN()
方法返回的是true
還是false
可以檢測參數是否可以像number
那樣是可運算的,如果是不可運算的,則可賦予這個參數一個預設的值或者是其他合適的內容,就可以得到一個隱式轉換參數數值的函數。