Javascript中的条件运算符

Javascript中的条件运算符,javascript,operators,conditional-operator,conditional,Javascript,Operators,Conditional Operator,Conditional,像这样的语句一样使用条件运算符可以吗 (x == y) ? alert("yo!") : alert("meh!"); 还是用它来分配这样的值更正确 z = (x == y) ? "yo!" : "meh!"; 如果像语句一样使用它不是不正确的,那么可以添加多行代码来执行这样的操作吗?对多行代码使用ifthen和switch语句是否更正确 (x == y) ? (alert("yo!"), document.write("woot!")) : (alert("meh!"), document

像这样的语句一样使用条件运算符可以吗

(x == y) ? alert("yo!") : alert("meh!");
还是用它来分配这样的值更正确

z = (x == y) ? "yo!" : "meh!";
如果像语句一样使用它不是不正确的,那么可以添加多行代码来执行这样的操作吗?对多行代码使用ifthen和switch语句是否更正确

(x == y) ? (alert("yo!"), document.write("woot!")) : (alert("meh!"), document.write("blah!"));

这两种方法中的任何一种都是可以接受的,尽管您也可以编写:

alert((x == y) ? "yo!" : "meh!");

除此之外,我永远不会建议对多行语句使用内联条件,只需使用标准的if/else块即可。考虑到您输入的语法也不是有效的JS,您可以将多个语句放入匿名方法和yada-yada中,然后进入一个几乎无法管理且不必要困难的代码的混乱状态。同样,标准if/else.

JavaScript不会阻止您这样做,但这是一种非常不寻常的做法,会让任何阅读您的代码的人感到困惑

条件运算符几乎总是用于选择两个可选值,而不是语句。对于语句的条件分支,首选
if
语句

关于你的最后一个问题,是的,如果你真的必须,你可以滥用
[]
结构:

(x == y) ? [alert("yo!"), document.write("woot!")] : otherstuff();

但是请不要。8-

这完全取决于你,你可以用任何一种方法。不过,您只需问问自己,这种风格是否符合公司的指导原则,以及您希望此代码的可读性如何

使用if语句更具可读性


就我个人而言,我只在简单且快速的真/假条件下使用三元运算符——如果这样做有意义的话——或者我需要一些“内联”的东西的话。

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

var a = x ? 1 : 2;
在可能的情况下,为了可读性,应使用IF/ELSE语句有条件地运行函数:

// This is possible but IMO not best practice:
X ? doSomething() : doSomethingElse();
大多数情况下,这是一个冗长的解决方案:

if (X) {
    doSomething();
} else {
    doSomethingElse();
}
IF/ELSE结构的一个显著优点是,您可以在每种情况下以最少的麻烦添加额外的任务

您的最后一个代码片段也是可能的,但它看起来有点冗长,而且可能更适合于更传统的逻辑结构;就像一个IF/ELSE块

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

(something && somethingElse > 2) ?
   doSomeLongFunctionName()
   : doSomeOtherLongFunctionName();

最后,就像很多事情一样,这取决于个人偏好。永远记住,你写的代码不仅仅是为你自己;其他开发人员将来可能不得不涉水而过;尽量使它可读

我同意Chris和J-p的观点:

  • 条件运算符对于简短语句很方便。J-P的变量赋值就是一个很好的例子:
    var a=x?1 : 2;
  • 为了可读性,多语句子句应该在单独的行上分开
  • 条件运算符可以作为具有正确缩进的多行语句可读,但大多数开发人员更熟悉
    if/else
    语法。可读性是指满足读者的期望,因此熟悉度很重要
  • 我要补充的是,多行条件运算符会导致分号插入错误。有关这方面的更多信息,请查看(请参阅“换行”部分)。如果必须使用多行条件运算符,请确保运算符位于每行的末尾。我将重做J-P的多行示例:

    (something && somethingElse > 2) ?
       doSomeLongFunctionName() :
       doSomeOtherLongFunctionName();
    

    如前所述,有许多样式指南,您可以选择您喜欢的样式。然而,有些选择比其他选择更容易出错。一定要仔细看一看;这是一个经过深思熟虑的风格指南,如果您坚持使用它,您甚至可以使用JSLint工具自动检查代码是否存在潜在问题。

    语法的存在是有原因的-没关系。我知道有一种高效或更正确的方法来做事情。大多数时候我都不知道它们是什么!谢谢大家的光临!因此,条件运算符和多个语句可以但可能不应该混合使用。明白了,谢谢!我没有考虑如何优化它,但那很好。我仍然需要让它明白,它们可以在表达式中使用。