1.1-隐式转换介绍
在js中,当运算符在运算时,如果两边数据不统一,CPU就无法计算,这时我们编译器会自动将运算符两边的数据做一个数据类型转换,转成一样的数据类型再计算,这种无需程序员手动转换,而由编译器自动转换的方式就称为隐式转换,例如1 > "0"这行代码在js中并不会报错,编译器在运算符时会先把右边的"0"转成数字0然后再比较大小
关于== 和 ===的性能,有人会觉得, == 的性能会比 === 的性能要慢。没错,== 确实是要比 === 多花一点时间,但是这只是微秒级的差别,也就是万分之一秒左右,对于程序来说可忽略不计。但是无论 == 还是 === 都会检测类型,只是检测出来之后各自的操作不一样。
空数组的toString()方法会得到空字符串,而空对象的toString()方法会得到字符串[object Object]
(注意第一个小写o,第二个大写O哟)
逻辑运算符优先级高于关系运算符
1.逻辑非将其他数据类型转换成布尔类型
2.关系运算符将其他数据类型转换成数字
valueOf() 方法可返回 Boolean 对象的原始值。
console.log( [ ] == 0) //true 空数组的toString()方法会得到空字符串
console.log( ![ ] == 0) //true 空数组转布尔得到true 然后取反得到false
console.log( [ ] == [ ]) //false
console.log( !{} == 0) //false 空对象
console.log( {} == {}) //false 引用数据类型存在堆中,堆中存储的是地址
console.log( !{} == {}) //false