一、兩種數據類型:基本類型、引用類型
基本類型:
String、 Boolean、Number、Undefined、Null、Symbol、 BigInt
引用類型:
Array、Object、Function
二、基礎類型的轉換:
1、數字加字符串,變字符串
var num = 1 + '2'; //只要有string類型的,原始值轉化字符串toString()操作,進行字符串拼接
2、數字 減 乘 除 大於 小於 字符串,字符串轉數字
如果字符串是純數字或空字符串或16進制則轉成數字,否則NaN
var num = 12 - '3'; //9 數字
var num = 12 / '3'; //4 數字
var num = 12 * '3'; //36 數字
var num = 12 - '3a'; //NaN 字符串轉NaN 數字-NaN 等於NaN
var bo = 12 > '3'; //true 字符串3轉數字 再比較
var bo = 12 > '3a'; //false 字符串轉NaN 比較不成立錯誤
三、引用類型的轉換:
先把引用類型轉基礎類型再按照基礎類型的方式比較。
如果是Date類型的PreferredType被設置為String ,其餘PreferredType被設置為Number
1、PreferredType為Number 先valueOf()再toString()
1 輸入的值是原始值, 則直接返回原始值
2 否則調用對象的valueOf()方法,如果valueOf()方法的返回值是原始值,則返回這個原始值。
3 否則調用對象的toString()方法, 如果toString()方法的返回值是原始值,則返回這個原始值。
4 否則 拋出TypeError異常
2、PreferredType為String 先toString()再valueOf()
1 輸入的值是原始值,則直接返回原始值
2 否則調用對象的toString()方法,如果toString()方法返回值是原始值,則返回這個原始值。
3 否則調用valueOf()方法,如果valueOf()方法的返回值是原始值,則返回這個原始值。
4 否則 拋出TypeError異常
部分例子:
console.log([] + []); //'' (空字符串)
//1 []以Number為轉換標準, valueOf() 得到的依然是[]
//2 [] toString 得到 ''
// '' + '' 得到
console.log([] + {}); // '[object Object]'
//1 []以Number轉換標準, valueOf() > toString() 得到 ''
//2 {}以Number轉換標準, valueOf()得到{} > toSting() 得到 '[object Object]'
//兩邊字符串憑藉得到'[object Object]’
console.log({} + {}); //'[object Object][object Object]'
//1 {}以Number轉換標準, valueOf()得到{} > toSting() 得到 '[object Object]’
//兩邊字符串憑藉得到'[object Object][object Object]’
var a = 'hello ', b = {};
console.log( a + b ); // ‘hello [object Object]’
//1 a是原始類型 直接返回
//2 {}以Number轉換標準, valueOf()得到{} > toSting() 得到 '[object Object]’
//3 'hello ' + '[object Object]'
四、有關==的隱式轉換
規則 1:NaN和其他任何類型比較都是false(包括和他自己)
NaN == NaN // false
規則 2:Boolean和其他任何類型比較,Boolean首先轉成Number
true == 1 // true
true == '2' // false, 先把 true 變成 1 再比較
true == ['1'] // true, 先把 true 變成 1, ['1']拆箱成 '1',
undefined == false // false ,首先 false 變成 0,然後參考規則4
null == false // false,同上
規則 3:String和Number比較,String轉成Number類型
123 == '123' // true, '123' 會先變成 123
'' == 0 // true, '' 會首先變成 0
‘0’ == false // true 兩者轉數字
規則 4:null == undefined是true,除此之外,null、undefined和其他任何結果比較都為false
null == undefined // true
null == '' // false
null == 0 // false
null == false // false
undefined == '' // false
undefined == 0 // false
undefined == false // false
規則 5:原始類型和引用類型做比較時,引用類型會依照ToPrimitive規則轉換為原始類型再比較
'[object Object]' == {}
// true, 對象和字符串比較,對象通過 toString 得到一個基本類型值
'1,2,3' == [1, 2, 3]
// true, 同上 [1, 2, 3]通過 toString 得到一個基本類型值
五、圖示類型值轉換
資料:
JavaScript隱式轉換
JavaScript 隱式類型轉換,一篇就夠了
幫你徹底弄懂 JavaScript 類型轉換