JavaScript逗号运算符与其他运算符结合时结果差异的原因咨询
JavaScript逗号运算符与其他运算符结合时结果差异的原因咨询
嗨,这个问题的核心其实就藏在JavaScript的运算符优先级里,咱们拆开来一步步分析就懂了!
首先先明确两个关键知识点:
- 逗号运算符的作用是:从左到右依次执行所有逗号分隔的表达式,最后返回最右侧表达式的结果
- 但逗号运算符的优先级是JavaScript里最低的——比
==、&&这些常用运算符都要低,这就是导致两种场景结果不同的根本原因
先看第一个场景:A() && B()
咱们先拆解两个函数的返回值:
- 函数
A的返回语句:return '1','2' == '1';
因为逗号优先级最低,所以这个语句会被拆解成:先执行'1'(这个表达式没有实际作用,只是执行了而已),然后执行'2' == '1',这个比较的结果是false,所以A()最终返回false - 函数
B的返回语句:return '1','2' == '2';
同理,先执行'1',然后执行'2' == '2',结果是true,所以B()返回true - 那
false && true的结果自然是false,这就是第一个console.log输出false的原因
再看第二个场景:const x = ('1','2' == '1' && '1','2' == '2');
这里同样因为逗号优先级最低,整个表达式会被拆成三个依次执行的部分:
- 第一个表达式:
'1',执行后没有实际影响 - 第二个表达式:
'2' == '1' && '1',先算'2' == '1'得到false,再算false && '1'结果还是false - 第三个表达式:
'2' == '2',结果是true
- 逗号运算符最终返回最后一个表达式的结果,所以
x的值就是true,这就是第二个console.log输出true的原因
最后再给你提个醒
如果想让某些表达式在逗号之前先整体执行,记得用括号把它们包起来,比如如果想让('1','2') == '1'这种逻辑生效,就得加括号提升优先级,不然JavaScript会先执行==再处理逗号哦!
内容来源于stack exchange
相关产品推荐
相关产品推荐

