【发布时间】:2016-03-30 06:02:06
【问题描述】:
var url = age > 18 ? (
alert("OK, you can go."),
// alert returns "undefined", but it will be ignored because
// isn't the last comma-separated value of the parenthesis
"continue.html" // the value to be assigned if age > 18
) : (
alert("You are much too young!"),
alert("Sorry :-("), // Q2) ***When does it evaluate this line?
// etc. etc.
"stop.html" // the value to be assigned if !(age > 18) Q1) this line is evaluated first right?
);
location.assign(url); // "stop.html"
问题:当使用ternary 运算符时,它会计算右操作数的最右边的项吗?因此,如果我输入逗号,那么它将采用最右边的逗号的表达方式。
如果我以某种方式调用此过程,它会评估最右边的第二个术语 (Q2)。
是否所有的假子句都分配给了变量?如果是这样,为什么输出只有stop.html,不包括Sorry 或You are much too young!?
【问题讨论】:
-
问:你为什么要把时间浪费在这么反常的事情上?对于“真实代码”,您想尝试避免不确定的行为,不是吗?建议:1) 用“Console.log()”替换“alert()”,2) 在调试器下单步调试代码,3) 一定要尝试几种不同的浏览器。例如,Chrome 的行为是否与 FF/Firebug 不同? IE11 和 IE8 有什么不同?
-
您的代码对我来说运行良好。确保您启用了弹出窗口。
-
这仅仅是因为所有的语句都被执行了,但只有最后一个返回被分配了。如果您使用
||运算符而不是,,那么它将在第一个值处停止。但是,是的,这似乎是三元运算符的错误用例。
标签: javascript variable-assignment ternary-operator conditional-operator operator-precedence