筆記:隱式轉換規則

這波能反殺發表於2018-01-10

學習並背誦全文

原始值

型別 Undefined Null String Boolean Number
undefined null 所有字串 true false 所有數字/NaN

引用型別

Object的成員叫物件,包括Array,Function,Math,Date,JSON,RegExp等除了原始值之外的所有的型別的成員。

valueOf / toString

Object String Array Number Date Boolean Function
valueOf 原始值 原始值 原始值 原始值 毫秒時間戳 原始值 string
toString [Object Object] 原始值 join方法返回的結果 數字字串 本地時間字串 'true'/'false' string

Boolean(x)

X Undefined Null String Boolean Number Object
Boolean(X) = true - - 非空字串 true 非0 非NaN 所有
Boolean(X) = false undefined null 空字串 false 0 NaN

Number(x)

X Undefined Null String Boolean Number Object
Number(X) = number - - 全為數字 - 原樣返回 desc: 先呼叫valueOf再轉換為Number
Number(X) = 0 - null '0' false 0 -
Number(X) = 1 - - '1' true 1 -
Number(X) = NaN undefined - 包含數字之外的字元 - NaN -

String(x)

X Undefined Null String Boolean Number Object
String(x) 'undefined' 'null' 原樣返回 'true'/'false' toString結果 先轉為原始值,然後呼叫toString

Object(x)

x undefined null Boolean Number String Object
Object(x) {} {} 原始值為X的Boolean物件 原始值為X的Number物件 原始值為X的String物件 原值輸出
Object(undefined) // {}
Object(null)  // {}
Object(true)   // Boolean {true}
Object(false)  // Boolean {false}
Object(1)      // Number {1}
Object('hello') // String {"hello"}
Object({ a: 1 }) // {a: 1}
複製程式碼

場景

轉換為Number

  • 一元 +, - 運算子
+{} = NaN
+'20' = 20
-'20' = -20
+[] = 0;
+[1] = 1;
+[1, 2] = NaN
複製程式碼
  • ++, -- 運算子

  • +, -, *, /, % 計算

需要注意的是,當 + 計算有字串參與計算時,會轉換為字串。

  • >, <, >=, <= 比較運算子, 運算元都不是String型別時

  • ==, != 運算元中只有String型別和Number型別,或者其中有一個是Boolean

轉換為Boolean

  • && ! || 運算
  • 條件運算
  • if, while, do-while, for

轉換為String

  • + 號運算,其中一個操作符為字串
  • 比較運算,其中一個操作符為字串

筆記:隱式轉換規則

相關文章