1. 程式人生 > >JavaScript 一共提供了8個比較運算子。

JavaScript 一共提供了8個比較運算子。

強制轉換

強制轉換主要指使用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函式整體轉換字串的型別。

另外,parseIntNumber函式都會自動過濾一個字串前導和字尾的空格。

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方法返回的是物件,就報錯。