JavaScript數據類型轉換

基本類型

number,string,boolean,undefined,null,object,symbol數組

顯式轉換

轉string

number, string, boolean, undefined,null,symbol會以字符串的形式原樣貌輸出。編碼

object: 會輸出爲"[object Object]".net

轉number

使用基本包裝類型Number

Stringcode

  • 數字格式:原樣貌輸出,例如 Number('123') ==> 123
  • 空字符串:輸出0,例如Number('') ==> 0
  • 其餘: 輸出NaN, 例如Number('s') ==> NaN

booleancdn

  • true: 1,
  • false:

undefined: NaN對象

null: 0blog

object:調用object的toString方法,取其返回值進行轉換,規則同其餘類型。unicode

  • 例如 Number({toString() {return ''}}) ==> 0
  • 例如 Number({toString() {return 'ss'}}) ==> NaN

symbol: 會報錯。報錯內容:Cannot convert a Symbol value to a number字符串

使用parseInt

Stringget

  • 數字格式:原樣貌輸出,例如 parseInt('123') ==> 123
  • 數字打頭:輸出前面的數字,例如 parseInt('1s') ==> 1
  • 空字符串:輸出0,例如parseInt('') ==> NaN
  • 其餘字符串格式: 輸出NaN, 例如parseInt('s') ==> NaN

其餘狀況:均爲NaN

轉boolean

String:當字符串長度大於1時轉爲true,不然false,例如Boolean(' ') ==> true

number:當數字不全爲0時轉爲true,不然false,例如Boolean(0.01) ==> true, Boolean(0.0) ==> false

undefined,null: false

object: 均轉爲true,例如 Boolean({toString() {return false}})

Symbol: 均轉爲true,例如 Boolean(Symbol(false))

轉Object

number,string,boolean 轉爲其對應的基本包裝類型,例如 Object(1) ==> Number{1}。可是並不相等。

undefined,null: 轉換爲空對象。例如 Object(undefined) ==> {}

symbol: 轉換爲symbol包裝類型對象【此處解釋存疑】。例如 Object(Symbol(12)) ==>

隱式轉換

字符串鏈接+

轉換規則:會把其餘數據類型調用String()方法轉換成字符串而後拼接。

  • 例如: 1 + 'true' ==> 1true

+號說明:

  • 字符串鏈接符+:只要+號兩邊至少有一邊是字符串。
  • 算術運算符符+:兩邊都不能是字符串。

算術運算符

算術運算符: (+、-、*、**、/、%) 轉換規則:會把其餘數據類型調用Number()轉換成數字,而後作加法運算。

  • 例如: 1 + true ==> 2

關係運算符

轉換規則:

  • 當關系運算符兩邊有一邊是字符串的時候,會將其餘數據類型使用Number轉換,而後比較關係。
    • 例如:'2' < true ==> false
  • 當關系運算符兩邊都是字符串的時候,會同時轉成number,而後比較關係。此時是按照字符串對應的unicode編碼來轉成的數字。能夠使用charCodeAt查詢。
    • 例如:'aab' < 'abb' ==> true

特殊狀況

  • undefined == undefined ==> true
  • undefined == null ==> true
  • null == null ==> true
  • NaN == NaN ==> false

複雜數據類型

複雜數據類型:對象、數組

轉換規則:先調用valueOf()方法獲取其原始值,若是是值類型,則中止繼續調用。若是不是值類型,則調用該類型的toString()方法,若是是值類型,則轉換爲字符串進行比較,若是是複雜數據類型則報錯。

  • 例如:var a = { valueOf() { return 1 }, toString () { return 2
    } },a == 1 ==> true

邏輯非隱式轉換

邏輯非:將其餘數據類型使用Bollean()轉換成布爾類型。

  • 例如:
    • [] == 0 ==> true
      • [].valueOf().toString()獲得空字符串
      • Number('') === 0
    • ![] == 0 ==> true
      • 邏輯非優先級高於關係運算符 ![] =false
      • false == 0 成立
    • ![] == [] ==> true
      • 邏輯非優先級高於關係運算符 ![] = false
      • [].valueOf().toString()獲得空字符串
      • Number('') = 0
      • false == 0 成立
    • [] == [] ==> false
      • 引用類型比較的是地址值
    • !{} == {} ==> false
      • 邏輯非優先級高於關係運算符 !{} = false
      • {}.valueOf().toString()獲得'[object Object]'
      • Number('[object Object]') = NaN
      • false == NaN ==> false
    • {} == {} ==> false
      • 引用類型比較的是地址值

參考地址

相關文章
相關標籤/搜索