强制类型转换
Number() 转换成数字,无法转换成数字的则返回NaN。
String() 可以将任何类型转换成字符串
Boolean() 可以将任何类型的值转换成布尔值。返回 false 的有:0、false、undefined、‘’、null、undefined
下面的链接中,最后面列举出来一些常见的值转换为number、string 和 boolean 后的值
https://www.runoob.com/js/js-type-conversion.html
隐式类型转换
需要了解运算符优先级https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
- 四则运算计算原始值:
+ 中只要其中一个是String类型,另一个值就会被转化为String类型,否则运算符两边的值都会被转化为Number类型。
- 四则运算计算引用值:
引用值调用toString转换为字符串,然后按照四则运算计算原始值的规则进行计算。(再调用toString之前还会调用valueOf方法返回原始值)
- &&、||、! 调用Boolean()
- If语句 调用Boolean()
- 关系型运算符计算原始值(< > <= >= == !=)
调用Numbe,如果两边都是字符串,则逐为对比UNICODE标准字符集
特殊情况
null == null // ture
undefined == undefined // true
undefined == null /true
NaN 不等于任何数
- 关系型运算符计算引用值(< > <= >= == !=)
如果两个都是引用值,比较栈内存的地址,只有一个则引用值调用toString转换为字符串,然后按照关系型运算符计算原始值的规则进行计算。(再调用toString之前还会调用valueOf方法返回原始值)(数组的toString方法返回‘’,对象的toString返回‘[object,Object]’)
[] == 0 // true [].toString()//'' => Number('')//0 == 0
![] == 0 // true !Boolean([])//false => Number(false)//0 == 0
![] == [] //`true !Boolean([])//false => Number(false)//0 == [].toString()//'' =>Number(‘’)//0
[] == [] // false 对比地址
{} == {} // false 对比地址
!{} == {} // false !Boolean({})//false => Number(false)//0 == {}.toString()//'[object,Object]' => Number(’[object,Object]’)//NaN
- !== === 不进行转换