今天在写业务逻辑判断的时候,实实在在地踩了一个坑,特此记录一下。
把代码中的具体业务抽离一下,大概是这样的:
let flag = 0 === false &&
1 == true &&
'' == false ? false : true
问,flag 的值是多少?
当然,如果你开发经验丰富的话,很容易看出结果是多少。
先说说我踩坑的思路:
- 首先,&& 运算符,是有一种短路效果的,也就是说多个 && 运算符同时出现的话,如果前面有一个 false,那么后面的 && 就不会判断了,相信这一点,大家都知道
- 于是乎,我就得出了答案,因为
0 === false
为false
,所以,后面的就不会再判断了,所以 flag 的值就为false
但很明显,我错了,后面还有个三目运算符啊。。。
在三目运算符看来0 === false && 1 == true && '' == false ? false : true
中的 0 === false && 1 == true && '' == false
是一个整体。
所以,前面的整体为false
,所以经过三目之后,得到的结果就为true
如果给三目加上括号,结果就相反了:
所以,长个教训,以后写这种逻辑运算符,并且有点长的时候,一定一定要加括号,因为指不定就会出现一些你预想不到的情况,到时候又得调试半天。