一、两种数据类型:基本类型、引用类型

基本类型:

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 得到一个基本类型值

五、图示类型值转换

image.png
image.png
image.png

资料:

JavaScript隐式转换
JavaScript 隐式类型转换,一篇就够了
帮你彻底弄懂 JavaScript 类型转换


Jerry
481 声望203 粉丝

学习的付出 从不欺人。记忆总是苦,写总结最牢固