我的
语法错误false ? {var x = 1;} : {var x = 2;}
但是当只使用最后两个操作数的表达式时,我不会遇到任何问题。
我是否必须诉诸条件?
答案 0 :(得分:5)
这种事情是用IF语句完成的。
if (false) { x = 1; }
else { x = 2; }
使用您的语法执行此操作:
var x = false ? 1 : 2;
答案 1 :(得分:1)
[注意:这充满了我个人的偏见]
停止使用三元运算符,这很可怕而且很荒谬。 从不使代码更易于阅读。只需使用if语句。如果您的目标受众是维护程序员,那么清晰度通常是代码的理想特征。
var x;
if (false)
{
x = 1;
}
else
{
x = 2;
}
[偏向11!] 如果您认为代码的目标受众是编译器或浏览器,那么您需要在游戏中占据一席之地并停止编程,就像愚蠢的火箭一样。人类维护代码而不是编译器和浏览器。
答案 2 :(得分:1)
要明确回答这个问题,不,第二和第三个操作数必须是表达式,并且不能是语句。这是MDN文档:https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special/Conditional_Operator
请注意语法:条件? expr1:expr2
<小时/> 编辑:只是一个有趣的侧面说明,因为函数调用是表达式,你可以传递上下文,你可以完成你想要做的事情。这太糟糕了。不要这样做。但你可以......
console.log(typeof x); // undefined
false ? (function() { this.x = 1; }).call(this) : (function() { this.x = 2; }).call(this);
console.log(typeof x); // number
答案 3 :(得分:0)
这不会起作用,因为var x
在发生这种情况后总是会超出范围。
您需要在此之外声明var x
:
var x;
false ? {x = 1;} : {x = 2;}
从写出if
的方面考虑这个问题(顺便说一句,这是相同的)
if (false)
{
var x = 1;
}
else
{
var x = 2;
}
// can't do anything with x here, because it doesn't exist
答案 4 :(得分:0)
答案 5 :(得分:0)
这不是对象符号的工作原理。您的语法错误不是三元运算符,而是您的对象表示法。
false ? {x: 1} : {x: 2}
这很有效。
答案 6 :(得分:0)
第二个和第三个参数需要用括号括起来,而不是花括号来执行条件中的代码。
Math.random() > .5 ? (console.log('1')) : (console.log('2'));