如何在JavaScript中计算三元运算符?
关于JavaScript中的三元(如何在JavaScript中计算三元运算符?,javascript,ternary-operator,Javascript,Ternary Operator,关于JavaScript中的三元(?:)运算符,我想知道典型浏览器的JavaScript解释器是如何评估它的: 备选案文A: (1)? functionOne(): functionTwo() 计算第一个操作数 如果第一个操作数的结果为真,则计算并返回第二个操作数 否则,计算并返回第三个操作数 备选案文B: 对所有三个操作数进行求值 如果第一个操作数的结果为真,则返回第二个操作数的结果 否则,返回第三个操作数的结果 备选案文C: 当然,如果备选方案A和备选方案B都不能准确描述三元运算符的工作原
?:
)运算符,我想知道典型浏览器的JavaScript解释器是如何评估它的:
备选案文A:
(1)? functionOne(): functionTwo()
(1)? functionOne(): functionTwo()
生产<代码>条件表达式:逻辑表达式?AssignmentExpression:AssignmentExpression的计算如下:
lref
作为计算LogicalORExpression
的结果ToBoolean(GetValue(lref))
为true
,则
- 让
作为计算第一个trueRef
的结果AssignmentExpression
- 返回
GetValue(trueRef)
- 让
作为计算第二个falseRef
赋值表达式的结果
- 返回
GetValue(falseRef)
function functionOne(){
alert("one");
}
function functionTwo(){
alert("two");
}
运行此命令并查找:
function bool() {
alert('bool');
return false;
}
function a() {
alert('a');
return 'A';
}
function b() {
alert('b');
return 'B';
}
alert(bool() ? a() : b())
三元运算符由于几个原因而延迟求值
x!=0 ? 10/x:10代码>如果它同时计算所有内容,那么如果x为零,则会得到一个被零除的错误
“备选方案A”:
(1)?functionOne():functionTwo()
,如果在两个函数上都放置一条简单的警报消息,则只有functionOne
会显示其消息。噢,哇。谢谢将其作为答案发布,以便我可以接受。你可以比其他人的回复更快地测试它。我无法在IE6、IE7和IE8上测试它。抱歉,随机更正:JS中没有零除错误<代码>1/0==无穷大