JS中的==运算符
最近看到一道题,如何声明a,从而确保a ==1 && a== 2 && a==3返回true,额,虽然一眼就可以看出a需要声明为一个对象,但是却不清楚应该使用什么方法属性了,由此暴露对于JS的==运算符带来的自动类型转换还是印象不深刻,于是重新学习下。
==的隐式类型转换
如果类型不同,需要考虑基本类型和对象类型
- 基本类型
- 数字与字符串,字符串会转换为数字
- 数字与布尔,布尔会转换为数字
- 对象类型
- 如果其中一个是对象,则会调用对象的
valueOf
和toString
方法来尝试转化为基本类型值
- 如果其中一个是对象,则会调用对象的
当然,如果是===严格相等,不存在类型转换问题。
题
1 | (a ==1 && a== 2 && a==3)===true |
了解了类型转换规律,这道题就好解了
1 | const a = { |
总结
- 这道题考查了类型隐式转换的知识,还是挺有意思
- 实际开发中,我们往往使用严格相等===,同时eslint来约束该风格,避免出现意外情况。