面试题:
- 相等操作符 和 全等操作符的区别: 会发生隐式转换
'5'==5---> true: 因为一侧数字,一侧字符串, 字符串会---> 数字true == 5 ---> false: 因为一侧boolean,转换boolean- 逻辑或 如果第一个参数隐式转换后为false ,则直接返回第一个
- Boolean() 有6中情况为false,其他为true
一. 显式转换
Number()
- undefiend :NaN
- null:0
- symbol:报错
- true: 1, false:0
- object: 对象会先调用
valueOf()方法,如果结果不是原始类型,再调用toString()方法,然后将结果转换为数字。 - bigInt: 去掉n
parseInt相比Number,就没那么严格了,parseInt函数逐个解析字符,遇到不能转换的字符就停下来
Boolean()转换以下6种情况为false,其他为true:
- undefined
- null
- false
- +0,-0
- NaN
- ""
String() || toString() 转换为字符串
- 对于
null和undefined: String() - 其他对象: toString()
二. 隐式转换
所谓隐式转换,就是说在进行一些操作的时候,两边类型不同的情况下,
使用Number()或者Boolean() 默默进行转换后再比较或者判断!!! 所以哪些能转成什么结果还是要看上面的显式转换规则;
隐式转换操作符:
1. Boolean() - 转换为布尔值
在逻辑运算(
&&、||)、条件语句(if、while)、三元运算符(? :)等情况下会发生Boolean()进行隐式转换
- 与 &&: 第一个参数(进行隐式转换)为false的话,直接返回第一个
- 或 ||: 第一参数为false的话,直接返回第二个
2. Number() - 转换为数字
一元加
+, 算术运算符:(-、*、/、%),比较运算符(>,<)
- 字符串 ---> 数字
- 无法转换的的显示NaN,如
'abc'-10 ===> NaN; - 可以转换的 如
'2'-1 ==> 1
- 无法转换的的显示NaN,如
3. toString() - 转换为字符串
+运算符,一侧是字符串, 一侧是数值,则进行字符串拼接如"abc" + 10 => "abc10"
遇到复杂数据类型的时候,先转成原始数据类型,然后再转成字符串
相等操作符隐式转换规则
- 一侧布尔值,则将其转换为数值
- 一侧字符串,一侧数值,则尝试将字符串转换为数值
- 一侧对象,另一个操作数不是,则调用对象的
valueOf()方法取得其原始值,再根据前面的规则进行比较 null和undefined相等- 如果有任一操作数是
NaN,则相等操作符返回false - 如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回
true