&& 和 || 执行顺序问题

image.png
优先级查看
&& 执行顺序高于||,并且两者都是从左到右执行,

1 || 2 && console.log('result')

但是执行这段代码时,却没有打印result,这是为什么。

阅读 8.1k
3 个回答

这叫短路求值,具体说就是在a||b表达式中,如果a为真,计算机不会再去计算b的值,由于1为真所以不会再计算2&&console.log(...)的值所以不会打印result.

&&也有短路求值,如果左边的值为假,则不再计算右边的值。

&&是逻辑与运算,逻辑与,逻辑或都是短路逻辑,如果左侧表达式为 false,则直接短路返回结果,不再运算右侧表达式,就是这么定义的,运算逻辑如下:

第 1 步:计算第一个操作数(左侧表达式)的值。
第 2 步:检测第一个操作数的值。如果左侧表达式的值可转换为 false(如 null、undefined、NaN、0、""、false),那么就会结束运算,直接返回第一个操作数的值。
第 3 步:如果第一个操作数可以转换为 true,则计算第二个操作数(右侧表达式)的值。
第 4 步:返回第二个操作数的值。

还有一句话比较重要,优先级与求值顺序无关。如a+b && bc,虽然优先级最高,但这个表达式求值顺序是从左到右。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题