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的观点:
var a=x?1 : 2;代码>
if/else
语法。可读性是指满足读者的期望,因此熟悉度很重要(something && somethingElse > 2) ?
doSomeLongFunctionName() :
doSomeOtherLongFunctionName();
如前所述,有许多样式指南,您可以选择您喜欢的样式。然而,有些选择比其他选择更容易出错。一定要仔细看一看;这是一个经过深思熟虑的风格指南,如果您坚持使用它,您甚至可以使用JSLint工具自动检查代码是否存在潜在问题。语法的存在是有原因的-没关系。我知道有一种高效或更正确的方法来做事情。大多数时候我都不知道它们是什么!谢谢大家的光临!因此,条件运算符和多个语句可以但可能不应该混合使用。明白了,谢谢!我没有考虑如何优化它,但那很好。我仍然需要让它明白,它们可以在表达式中使用。