一、两种数据类型:根本类型、援用类型

根本类型:

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 等于NaNvar 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,而后参考规定4null == 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 // truenull == '' // falsenull == 0 // falsenull == false // falseundefined == '' // falseundefined == 0 // falseundefined == false // false

规定 5:原始类型和援用类型做比拟时,援用类型会按照ToPrimitive规定转换为原始类型再比拟

'[object Object]' == {} // true, 对象和字符串比拟,对象通过 toString 失去一个根本类型值'1,2,3' == [1, 2, 3] // true, 同上  [1, 2, 3]通过 toString 失去一个根本类型值

五、图示类型值转换



材料:

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