如何在JavaScript中评估三元运算符?

pyo*_*yon 13 javascript ternary-operator

关于? :JavaScript中的ternary()运算符,我想知道它是如何通过典型浏览器的JavaScript解释器进行评估的:

备选方案A:

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

备选方案B:

  1. 评估所有三个操作数.
  2. 如果第一个操作数的结果为true,则返回第二个操作数的结果.
  3. 否则,返回第三个操作数的结果.

备选方案C:

当然,如果替代A和替代B都没有准确描述三元运算符的工作原理,请解释它是如何工作的.

Fel*_*ing 10

根据规范,它的作用类似于备选方案A:

生产ConditionalExpression : LogicalORExpression ? AssignmentExpression : AssignmentExpression评估如下:

  1. 让我们lref评估的结果LogicalORExpression.
  2. 如果ToBoolean(GetValue(lref))true,那么
    • 让我们trueRef评估第一个结果AssignmentExpression.
    • 返回GetValue(trueRef).
  3. 其他
    • 让我们falseRef评估第二个结果AssignmentExpression.
    • 返回GetValue(falseRef).


JCO*_*611 6

"替代A":

(1)? functionOne(): functionTwo()
Run Code Online (Sandbox Code Playgroud)

如果在两个函数上都添加了简单的警报消息,则只有functionOne会显示其消息.

function functionOne(){ 
   alert("one");
}
function functionTwo(){ 
   alert("two");
}
Run Code Online (Sandbox Code Playgroud)