隐式转换
字符串连接符与算术运算符隐式转换
console.log(1 +"true"); //String(1) + "true" = "1true"
console.log(1 + true ); //1 + Number(true) = 1 + 1 = 2
console.log(1 + undefined );// 1 + Number(undefined)= 1 + NaN = NaN
console.log(1 + null );// 1 + Number(null) = 1 + 0 = 1
//结论:
//字符串连接符 + 会将其他的数据类型调用String()的方法,然后进行拼接
//是算术连接符 + 会将其他的数据类型调用Number()的方法,然后进行加法的计算
逻辑非隐式转换与关系运算符隐式转换
//逻辑非隐式转换与关系运算符隐式转换
/* 当关系运算符两边有一边是字符串的时候,会将其他数据类型使用Number来转换,然后进行比较
-当关系运算符两边都是字符串的时候,会根据字符串对应的`unicode`来比较
- XXX.charCodeAt()
-多个字符的时候,会一位一位的比较,出现结果就停止比较
*/
console.log("2" > 10 );// Number('2') = 2 > 10 ? false
console.log("2" > "10 ");//true "2".charCodeAt()=50 "10".charCodeAt()=49
console.log("abc" > "b "); //false "a".charCodeAt()=97 "b".charCodeAt()=98 "c".charCodeAt()=99
console.log("abc" > "aad ");//true
//特殊情况
console.log(undefined == undefined ); //true
console.log(undefined == null ); //true
console.log(null == null ); //true
console.log(NaN == NaN ); //false
console.log([] == 0 ); //true
console.log(![] == 0 ); //true
常用快捷隐式转换
字符串-0会直接转换为数字类型
字符串*1会直接转换为数字类型
数字+''会直接转换为字符串类型