关于JavaScript中的三元(? :
)运算符,我想知道它是如何通过典型浏览器的JavaScript解释器进行评估的:
备选方案A:
备选方案B:
备选方案C:
当然,如果替代A和替代B都没有准确描述三元运算符的工作原理,请解释它是如何工作的。
答案 0 :(得分:10)
According to the specification它的作用类似于备选方案:
生产
ConditionalExpression : LogicalORExpression ? AssignmentExpression : AssignmentExpression
的评估如下:
- 让
lref
成为评估LogicalORExpression
的结果。- 如果
ToBoolean(GetValue(lref))
true
,那么
- 让
trueRef
成为评估第一个AssignmentExpression
的结果。- 返回
GetValue(trueRef)
。- 否则
醇>
- 让
falseRef
成为评估第二个AssignmentExpression
的结果。- 返回
GetValue(falseRef)
。
答案 1 :(得分:6)
“替代A”:
(1)? functionOne(): functionTwo()
如果您在两个函数上都添加了一条简单的警报消息,则只有functionOne会显示其消息。
function functionOne(){
alert("one");
}
function functionTwo(){
alert("two");
}
答案 2 :(得分:3)
三元运算符由于多种原因而懒惰地评估。
x != 0 ? 10 / x : 10;
之类的操作如果它同时评估所有内容,如果x为零,则会得到除以零错误答案 3 :(得分:2)
运行此并找出:
function bool() {
alert('bool');
return false;
}
function a() {
alert('a');
return 'A';
}
function b() {
alert('b');
return 'B';
}
alert(bool() ? a() : b())