隐式类型转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了隐式类型转换相关的知识,希望对你有一定的参考价值。

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

以上是关于隐式类型转换的主要内容,如果未能解决你的问题,请参考以下文章

隐式转换类型

隐式类型转换

UIViewAnimation 导致从枚举类型隐式转换

js隐式类型转换,预编译递归

无法将类型 double 隐式转换为 int

scala中隐式转换之总结