关于javascript:使用if-else简写时省略第二个表达式

Omitting the second expression when using the if-else shorthand

没有else,我可以写if else的简写吗?

1
2
3
var x=1;

x==2 ? dosomething() : doNothingButContinueCode();

我注意到把null放在其他作品上(但我不知道为什么或者这是个好主意)。

编辑:你们中有些人似乎很困惑为什么我要尝试这个。放心吧,这完全是出于好奇。我喜欢摆弄javascript。


你所掌握的是三元运算符的一种非常不寻常的用法。通常,它在某些其他操作中用作表达式,而不是语句,例如:

1
var y = (x == 2 ?"yes" :"no");

因此,对于可读性(因为您所做的是不寻常的),并且因为它避免了您不想要的"其他",我建议:

1
if (x==2) doSomething();


这也是一个选项:

1
x==2 && dosomething();

只有当x==2的计算结果为真时,才会调用dosomething()。这叫做短路。

它在这种情况下并不常用,您真的不应该编写这样的代码。我鼓励这种更简单的方法:

1
if(x==2) dosomething();

您应该随时编写可读的代码;如果您担心文件大小,只需在众多JS压缩器中的一个的帮助下创建一个它的小型版本。(例如Google的闭包编译器)


另一种选择:

1
x === 2 ? doSomething() : void 0;


如果你不做其他的,为什么不做:

1
if (x==2) doSomething();


对于三元表达式的一个分支,使用null是可以的。三元表达式在JavaScript中可以作为语句使用。

不过,就风格而言,如果您想调用一个过程,那么用if..else编写这个过程就更清楚了:

1
2
if (x==2) doSomething;
else doSomethingElse

或者,在你的情况下,

1
if (x==2) doSomething;

在这条非常非常非常老的线上再加一点……

假设你的e在一个for循环中,需要用三元运算符来计算一个truthy/falsy值的变量,而如果是falsy值,你想要continue—你会遇到一个问题,因为你没有返回表达式,你返回的是一个没有任何值的语句。

这将产生Uncaught SyntaxError: Unexpected token continue

1
2
3
 for (var i = 0; i < myArray.length; i++) {
      myArray[i].value ? alert('yay') : continue;
 }

因此,如果您确实想返回一个语句,并且仍然使用一行代码,虽然乍一看可能有点奇怪,并且可能不遵循严格的语言用法,但是您可以这样做:

1
2
3
  for (var i = 0; i < myArray.length; i++) {
      if (myArray[i].value) alert('yay') ; else continue;
  }
  • P.S-此代码可能难以阅读或理解,因此它并不总是最佳选择。只是说…:)


从技术上讲,将空值或0,或者只是一些随机值放在那里就可以了(因为您没有使用返回值)。但是,为什么要使用这个构造而不是if构造?当您以这种方式编写代码时,您试图做的事情就不那么明显了,因为您可能会将人们和no op混淆(在您的情况下为空)。


可能是最短的

1
x-2||dosomething()

1
2
3
4
5
let x=1, y=2;
let dosomething = s=>console.log(s);

x-2||dosomething('x do something');
y-2||dosomething('y do something');