基本类型
number,string,boolean,undefined,null,object,symbol数组
显式转换
转string
number, string, boolean, undefined,null,symbol会以字符串的形式原样貌输出。编码
object: 会输出为"[object Object]".net
转number
使用基本包装类型Number
Stringcode
- 数字格式:原样貌输出,例如 Number('123') ==> 123
- 空字符串:输出0,例如Number('') ==> 0
- 其余: 输出NaN, 例如Number('s') ==> NaN
booleancdn
undefined: NaN对象
null: 0blog
object:调用object的toString方法,取其返回值进行转换,规则同其余类型。unicode
- 例如 Number({toString() {return ''}}) ==> 0
- 例如 Number({toString() {return 'ss'}}) ==> NaN
symbol: 会报错。报错内容:Cannot convert a Symbol value to a number字符串
使用parseInt
Stringget
- 数字格式:原样貌输出,例如 parseInt('123') ==> 123
- 数字打头:输出前面的数字,例如 parseInt('1s') ==> 1
- 空字符串:输出0,例如parseInt('') ==> NaN
- 其余字符串格式: 输出NaN, 例如parseInt('s') ==> NaN
其余状况:均为NaN
转boolean
String:当字符串长度大于1时转为true,不然false,例如Boolean(' ') ==> true
number:当数字不全为0时转为true,不然false,例如Boolean(0.01) ==> true, Boolean(0.0) ==> false
undefined,null: false
object: 均转为true,例如 Boolean({toString() {return false}})
Symbol: 均转为true,例如 Boolean(Symbol(false))
转Object
number,string,boolean 转为其对应的基本包装类型,例如 Object(1) ==> Number{1}。可是并不相等。
undefined,null: 转换为空对象。例如 Object(undefined) ==> {}
symbol: 转换为symbol包装类型对象【此处解释存疑】。例如 Object(Symbol(12)) ==>
隐式转换
字符串链接+
转换规则:会把其余数据类型调用String()方法转换成字符串而后拼接。
+号说明:
- 字符串链接符+:只要+号两边至少有一边是字符串。
- 算术运算符符+:两边都不能是字符串。
算术运算符
算术运算符: (+、-、*、**、/、%) 转换规则:会把其余数据类型调用Number()转换成数字,而后作加法运算。
关系运算符
转换规则:
- 当关系运算符两边有一边是字符串的时候,会将其余数据类型使用Number转换,而后比较关系。
- 当关系运算符两边都是字符串的时候,会同时转成number,而后比较关系。此时是按照字符串对应的unicode编码来转成的数字。能够使用charCodeAt查询。
- 例如:'aab' < 'abb' ==> true
特殊状况
- undefined == undefined ==> true
- undefined == null ==> true
- null == null ==> true
- NaN == NaN ==> false
复杂数据类型
复杂数据类型:对象、数组
转换规则:先调用valueOf()方法获取其原始值,若是是值类型,则中止继续调用。若是不是值类型,则调用该类型的toString()方法,若是是值类型,则转换为字符串进行比较,若是是复杂数据类型则报错。
- 例如:var a = { valueOf() { return 1 }, toString () { return 2
} },a == 1 ==> true
逻辑非隐式转换
逻辑非:将其余数据类型使用Bollean()转换成布尔类型。
- 例如:
- [] == 0 ==> true
- [].valueOf().toString()获得空字符串
- Number('') === 0
- ![] == 0 ==> true
- 逻辑非优先级高于关系运算符 ![] =false
- false == 0 成立
- ![] == [] ==> true
- 逻辑非优先级高于关系运算符 ![] = false
- [].valueOf().toString()获得空字符串
- Number('') = 0
- false == 0 成立
- [] == [] ==> false
- !{} == {} ==> false
- 逻辑非优先级高于关系运算符 !{} = false
- {}.valueOf().toString()获得'[object Object]'
- Number('[object Object]') = NaN
- false == NaN ==> false
- {} == {} ==> false
参考地址