JavaScript 一共提供了8個比較運算子。
阿新 • • 發佈:2018-12-12
強制轉換
強制轉換主要指使用Number()
、String()
和Boolean()
三個函式,
手動將各種型別的值,分別轉換成數字、字串或者布林值。
Number()
使用Number
函式,可以將任意型別的值轉化成數值。
下面分成兩種情況討論,一種是引數是原始型別的值,另一種是引數是物件。
(1)原始型別值
原始型別值的轉換規則如下。
// 數值:轉換後還是原來的值 Number(324) // 324 // 字串:如果可以被解析為數值,則轉換為相應的數值 Number('324') // 324 // 字串:如果不可以被解析為數值,返回 NaN Number('324abc') // NaN // 空字串轉為0 Number('') // 0 // 布林值:true 轉成 1,false 轉成 0 Number(true) // 1 Number(false) // 0 // undefined:轉成 NaN Number(undefined) // NaN // null:轉成0 Number(null) // 0
Number
函式將字串轉為數值,要比parseInt
函式嚴格很多。
基本上,只要有一個字元無法轉成數值,整個字串就會被轉為NaN
。
parseInt('42 cats') // 42
Number('42 cats') // NaN
Number
函式將字串轉為數值,要比parseInt
函式嚴格很多。
基本上,只要有一個字元無法轉成數值,整個字串就會被轉為NaN
。
parseInt('42 cats') // 42
Number('42 cats') // NaN
上面程式碼中,parseInt
逐個解析字元,而Number
函式整體轉換字串的型別。
另外,parseInt
和Number
函式都會自動過濾一個字串前導和字尾的空格。
parseInt('\t\v\r12.34\n') // 12
Number('\t\v\r12.34\n') // 12.34
物件
簡單的規則是,Number
方法的引數是物件時,將返回NaN
,除非是包含單個數值的陣列。
Number({a: 1}) // NaN
Number([1, 2, 3]) // NaN
Number([5]) // 5
之所以會這樣,是因為Number
背後的轉換規則比較複雜。
第一步,呼叫物件自身的valueOf
方法。如果返回原始型別的值,則直
接對該值使用Number
第二步,如果valueOf
方法返回的還是物件,則改為呼叫物件自身的toString
方法。如果toString
方法返回原始型別的值,則對該值使用Number
函式,不再進行後續步驟。
第三步,如果toString
方法返回的是物件,就報錯。