JavaScript數據類型

JavaScript 數學 toujun007 2019-06-22

JavaScript數據類型

因為JavaScript是弱類型的語言,所以類型轉換髮生非常頻繁。

JavaScript數據類型

類型轉換分為兩種,隱式轉換即程序自動進行的類型轉換,強制轉換即我們手動進行的類型轉換。


強制轉換這裡就不再多提及了,下面我們來看看讓人頭疼的可能發生隱式類型轉換的幾個場景,以及如何轉換:



if語句和邏輯語句


if 語句和邏輯語句中,如果只有單個變量,會先將變量轉換為Boolean值,只有下面幾種情況會轉換成false,其餘被轉換成 true


  1. null

  2. undefined

  3. ''

  4. NaN

  5. 0

  6. false


JavaScript數據類型

各種數學算符


我們在對各種非Number類型運用數學運算符(- * /)時,會先將非Number類型轉換為Number類型;


  1. 1 - true// 0

  2. 1 - null// 1

  3. 1 * undefined// NaN

  4. 2 * ['5'] // 10


注意+是個例外,執行+操作符時:


1. 當一側為String類型,被識別為字符串拼接,並會優先將另一側轉換為字符串類型。



2. 當一側為Number類型,另一側為原始類型,則將原始類型轉換為Number類型。


3. 當一側為Number類型,另一側為引用類型,將引用類型和Number類型轉換成字符串後拼接。


  1. 123 + '123'// 123123 (規則1)

  2. 123 + null// 123 (規則2)

  3. 123 + true// 124 (規則2)

  4. 123 + {} // 123[object Object] (規則3)



==


使用==時,若兩側類型相同,則比較結果和===相同,否則會發生隱式轉換,使用==時發生的轉換可以分為幾種不同的情況(只考慮兩側類型不同):


NaN


NaN和其他任何類型比較永遠返回false(包括和他自己)。


  1. NaN == NaN// false



Boolean


Boolean和其他任何類型比較,Boolean首先被轉換為Number類型。


  1. true == 1// true

  2. true == '2'// false

  3. true == ['1'] // true

  4. true == ['2'] // false


這裡注意一個可能會弄混的點:undefined、null和Boolean比較,雖然undefined、null和false都很容易被想象成假值,但是他們比較結果是false,原因是false首先被轉換成0:


  1. undefined == false// false

  2. null == false// false



String和Number


StringNumber比較,先將String轉換為Number類型。


  1. 123 == '123'// true

  2. '' == 0// true



Null和Undefind


null == undefined比較結果是true,除此之外,nullundefined和其他任何結果的比較值都為false


  1. null == undefined// true

  2. null == ''// false

  3. null == 0// false

  4. null == false// false

  5. undefined == ''// false

  6. undefined == 0// false

  7. undefined == false// false



原始類型和引用類型


當原始類型和引用類型做比較時,對象類型會依照ToPrimitive規則轉換為原始類型:


'[object Object]' == {} // true

  1. '1,2,3' == [1, 2, 3] // true


!的優先級高於==![ ]首先會被轉換為false,然後根據上面第二點,false轉換成Number類型0,左側[]轉換為0,兩側比較相等。


  1. [] == ![] // true


根據數組的ToPrimitive規則,數組元素為nullundefined時,該元素被當做空字符串處理,所以[null]、[undefined]都會被轉換為0


  1. [null] == false// true

  2. [undefined] == false// true


所以,說了這麼多,推薦使用===來判斷兩個值是否相等...




隱式轉換規則


JavaScript數據類型





JavaScript數據類型



相關推薦

推薦中...