Javascript中的条件运算符

bao*_*luu 18 javascript conditional operators conditional-operator

是否可以像这样的语句使用条件运算符?

(x == y) ? alert("yo!") : alert("meh!");
Run Code Online (Sandbox Code Playgroud)

或者使用它来分配这样的值是否更正确?

z = (x == y) ? "yo!" : "meh!";
Run Code Online (Sandbox Code Playgroud)

如果像声明一样使用它是不正确的,那么可以添加多行代码来执行吗?为多行代码使用ifthen和switch语句更正确吗?

(x == y) ? (alert("yo!"), document.write("woot!")) : (alert("meh!"), document.write("blah!"));
Run Code Online (Sandbox Code Playgroud)

Jam*_*mes 25

条件运算符是有意简洁的,对于赋值特别有用:

var a = x ? 1 : 2;
Run Code Online (Sandbox Code Playgroud)

尽管可能,但为了便于阅读,使用它们来有条件地运行函数应该使用IF/ELSE语句来完成:

// This is possible but IMO not best practice:
X ? doSomething() : doSomethingElse();
Run Code Online (Sandbox Code Playgroud)

虽然啰嗦,但大多数时候,这是更好的解决方案:

if (X) {
    doSomething();
} else {
    doSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)

IF/ELSE结构的一个显着优点是,您可以在每种条件下添加额外的任务,而且麻烦最小.

您的最后一个片段也是可能的,但它看起来有些冗长,并且再次可能更适合更传统的逻辑结构; 像IF/ELSE块一样.

也就是说,条件运算符仍然可以是可读的,例如

(something && somethingElse > 2) ?
   doSomeLongFunctionName()
   : doSomeOtherLongFunctionName();
Run Code Online (Sandbox Code Playgroud)

最后,就像许多事情一样,这取决于个人偏好.永远记住你写的代码不只是为了你; 其他开发者可能不得不在将来涉及它; 尽量让它尽可能可读.