问题:函数未返回预期值 (3)。
以下代码未按预期返回 1。我发现这是由于使用了三元运算符。那三元会导致返回值出乎意料呢?是先入为主吗?根据 mdn 规范,三元运算符是右结合的。
function foo()
{
var x = 1;
var flag = true;
function bar(a,b)
{
return a + b;
}
var y = bar(2,2) - (flag) ? x : 0;
return y;
}
alert(foo());
请注意,如果我修改该行:
var y = bar(2,2) - (flag) ? x : 0;
到
var y = bar(2,2) - ((flag) ? x : 0);
以上代码将按预期返回 3。
另请注意,如果我将函数替换为任何类型的 float
var y = 3 - (flag) ? x : 0;
相同的意外返回值被计算为 1。
最佳答案
此问题是您假设空格或括号自动定界。
var y= bar(2,2) - (flag) ? x : 0;
与
相同var y= (bar(2,2) - (flag)) ? x : 0;
和不一样
var y= bar(2,2) - ((flag) ? x : 0);
关于javascript:三元运算符的意外评估行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20861029/