Javascript中的逻辑运算符和/或短马戏团

Javascript中的逻辑运算符和/或短马戏团,javascript,logical-operators,short-circuit-evaluation,Javascript,Logical Operators,Short Circuit Evaluation,我仍然处于JS的基本阶段,遇到了一个我最近结巴的练习,下面是代码: alert(alert(0) || alert(2)); 结果返回为0,然后返回2且未定义 我理解OR如何首先查找truthy值,如果没有找到,则返回最后一个值,但是在上面的代码中,它不应该在2之后停止计算吗?为什么还有未定义的返回?这是虚假的价值观 结果返回为0,然后返回2且未定义 听起来您错误地认为显示的值也是从alert()函数返回的。事实并非如此警报()始终返回未定义的。第一个警报显示0,但不会返回0。相反,alert

我仍然处于JS的基本阶段,遇到了一个我最近结巴的练习,下面是代码:

alert(alert(0) || alert(2));
结果返回为0,然后返回2且未定义

我理解OR如何首先查找truthy值,如果没有找到,则返回最后一个值,但是在上面的代码中,它不应该在2之后停止计算吗?为什么还有未定义的返回?这是虚假的价值观

结果返回为0,然后返回2且未定义


听起来您错误地认为显示的值也是从
alert()
函数返回的。事实并非如此<代码>警报()始终返回
未定义的
。第一个警报显示
0
,但不会返回
0
。相反,
alert()
函数返回值
undefined
。由于这是“falsey”,因此也会调用
警报(2)
,该警报显示a
2
,然后返回
未定义的
,这是
|
运算符的最终结果。然后此“未定义”由最终警报显示。

警报本身没有返回值,因此它只生成
未定义的
。您评估
undefined | | undefined
消息弹出窗口是调用
警报的副作用,它与这些表达式返回的值无关。