javascript - 三元运算符在 JavaScript 中是如何求值的?

标签 javascript ternary-operator

关于 JavaScript 中的三元 (? :) 运算符,我想知道典型浏览器的 JavaScript 解释器如何评估它:

备选方案 A:

  1. 计算第一个操作数。
  2. 如果第一个操作数的结果为真,则评估并返回第二个操作数。
  3. 否则,评估并返回第三个操作数。

备选方案 B:

  1. 计算所有三个操作数。
  2. 如果第一个操作数的结果为真,则返回第二个操作数的结果。
  3. 否则,返回第三个操作数的结果。

选项 C:

当然,如果备选方案 A 和备选方案 B 都不能准确描述三元运算符的工作原理,请向我解释它是如何工作的。

最佳答案

According to the specification它的工作方式与备选方案 A 相同:

The production ConditionalExpression : LogicalORExpression ? AssignmentExpression : AssignmentExpression is evaluated as follows:

  1. Let lref be the result of evaluating LogicalORExpression.
  2. If ToBoolean(GetValue(lref)) is true, then
    • Let trueRef be the result of evaluating the first AssignmentExpression.
    • Return GetValue(trueRef).
  3. Else
    • Let falseRef be the result of evaluating the second AssignmentExpression.
    • Return GetValue(falseRef).

关于javascript - 三元运算符在 JavaScript 中是如何求值的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5097346/

相关文章:

javascript - 动态渲染 .mht 文件,无需加载/iframe/嵌入

javascript - 如何通过脚本在 InDesign 中用给定文件替换图形?

javascript - 无法将 Parse 安装设置为两个 channel 以进行推送通知

javascript - 使用springmvc框架jQuery Ajax文件上传返回415

c++ - 三元运算符和增量运算符

java 三元运算符内部 + intellij 评估表达式

带有哈希标签的javascript重定向

c# - 在 Lambda 表达式中使用三元运算符

Perl 三元错误地输入 "else"子句?

php - 三元运算符简写在 true/false 子句中使用表达式的主题而不是重复