1. 抛出问题
控制台输出以下三个分别是什么:
'hello' ? true : false
'hello' == true
'hello' == false
2. 现象
显而易见,第一句('hello' ? true : false
)会输出true;然而,后面两句都输出了false(都输出false让我有点意外);
3. 解释
- 对于第一句(
'hello' ? true : false
)会输出true,就不用作过多解释了,就是字符串长度不为0的字符串在JavaScript里面都可以看作true - 对于第二句(
'hello' == true
)为什么会输出false呢?- 首先,布尔值会被toNumber方法转成数字,则得到
'hello' == 1
- 其次,字符串'hello'也会被toNumber方法转换成数字,但是因为该字符串含有字母,所以转换后变成NaN,则表达式变成了NaN == 1,so结果输出false。
- 首先,布尔值会被toNumber方法转成数字,则得到
- 同理可得,第三句(
'hello' == false
)也输出false
4. 顺提'==='?
恒等符===
相比起来就清晰多了,用恒等符比较,只有类型和值完全相同才返回true,否则都返回false
5. 总结
- 为了规范,推荐在项目中使用恒等操作符‘===’而非‘==’,如用到,最好写下备注。同时,如果项目中使用了eslint,eslint也会在使用‘==’的位置报出提示
- 尽量使用‘===’还有另外一个原因:因为它不需要隐式地进行类型转换,所以更快更省性能
-
==
运算会发生隐式转换,关于隐式转换,这里推荐一篇掘金看到的文章
网友评论