?:表达式的第二个和第三个操作数可以是语句吗?

时间:2011-09-29 17:07:43

标签: javascript

我的

语法错误
false ? {var x = 1;} : {var x = 2;} 

但是当只使用最后两个操作数的表达式时,我不会遇到任何问题。

我是否必须诉诸条件?

7 个答案:

答案 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)

这不是有效的语法。这是你如何做到的:

var x = false ? 1 : 2;

而且,你不应该在两个地方定义相同的变量,这是不好的做法。您可能需要阅读variable hoisting

答案 5 :(得分:0)

这不是对象符号的工作原理。您的语法错误不是三元运算符,而是您的对象表示法。

false ? {x: 1} : {x: 2}

这很有效。

答案 6 :(得分:0)

第二个和第三个参数需要用括号括起来,而不是花括号来执行条件中的代码。

Math.random() > .5 ? (console.log('1')) : (console.log('2'));