一、两种数据类型:基本类型、引用类型
基本类型:
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 得到一个基本类型值
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。