不同类型的变量比较要先转类型,叫做类型转换,类型转换也叫隐式转换。
隐式转换通常发生在运算符加减乘除,等于,还有小于,大于等。。
基本类型的转换
1.字符串加数字,数字就会转成字符串。
2.数字减字符串,字符串转成数字。如果字符串不是纯数字就会转成NaN。字符串减数字也一样。两个字符串相减也先转成数字。
3.乘,除,大于,小于跟减的转换也是一样。
规则:
1.undefined等于null
2.字符串和数字比较时,字符串转数字
3.数字为布尔比较时,布尔转数字
4.字符串和布尔比较时,两者转数字
console.log(undefined==null)//true
引用类型的转换
1.对象转数字时,调用valueOf()
;
2.对象转字符串时,调用toString()
;
示例
console.log(0 == []);
// true, 0 == [].valueOf(); -> 0 == 0;
console.log('0' == []);
// false, '0' == [].toString(); -> '0' == '';
console.log(2 == ['2']);
// true, 2 == ['2'].valueOf(); -> 2 == '2' -> 2 == 2;
console.log('2' == [2]);
// true, '2' == [2].toString(); -> '2' =='2';
console.log([] == ![]);
//true, [].valueOf() == !Boolean([]) -> 0 == false -> 0 == 0;
显示转换
console.log(Boolean({}))//true
console.log(Boolean([]))//true
console.log(Boolean(undefined))//false
console.log(Boolean(null))//false
console.log(Boolean(NaN))//false
console.log(Boolean(''))//false
console.log(Boolean(0))//false
console.log(Boolean({name:'yan'}))//true
console.log(Boolean([1,2]))//true