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

Nik*_*kki 279 javascript ternary-operator conditional-operator shorthand

没有别的,我可以写'if else'速记吗?

var x=1;

x==2 ? dosomething() : doNothingButContinueCode();   
Run Code Online (Sandbox Code Playgroud)

我注意到if else了其他的工作(但我不知道为什么或者这是个好主意).

编辑:有些人似乎很困惑为什么我会费心去尝试这个.请放心,这纯粹是出于好奇.我喜欢乱搞JavaScript.

Nic*_*ole 737

你所拥有的是对三元运算符的一种相当不寻常的用法.通常它在一些其他操作中用作表达式而不是语句,例如:

var y = (x == 2 ? "yes" : "no");
Run Code Online (Sandbox Code Playgroud)

因此,为了便于阅读(因为你正在做的事情是不寻常的),并且因为它避免了你不想要的"其他",我建议:

if (x==2) doSomething();
Run Code Online (Sandbox Code Playgroud)


aja*_*221 254

这也是一个选择:

x==2 && dosomething();
Run Code Online (Sandbox Code Playgroud)

dosomething()只有在x==2被评估为true时才会被调用.这称为短路.

它不常用于这种情况,你真的不应该写这样的代码.我鼓励这种更简单的方法:

if(x==2) dosomething();
Run Code Online (Sandbox Code Playgroud)

你应该随时写可读代码; 如果你担心文件大小,只需在许多JS压缩器之一的帮助下创建它的缩小版本.(例如谷歌的Closure编译器)

  • 哦,短路,对.在大多数中级开发人员和一些"经验丰富的专业人士"中,我认为代码可读性受到了重视. (10认同)
  • ```如果x == 2 && doSomething()|| doSomethingElse()``` (9认同)
  • 我个人认为如果它是一个小的如果有一个结果如果是真的..它更快更容易写x == 2 && dosomething(); (5认同)
  • 从技术上讲,你不需要括号:`if(1 - 1 === 0)$('.woot').text('Woot!');`我一直用PHP表示这种形式,现在我正在采用Coffeescript,我也在我的Javascript中使用它. (2认同)
  • 我希望 JavaScript 包含这种类似 Ruby 的语法:`doSomething() if x === 2`。我不怀念 Ruby,但我确实怀念那个。 (2认同)

Buz*_*nas 62

另外一个选项:

x === 2 ? doSomething() : void 0;
Run Code Online (Sandbox Code Playgroud)

  • 如果有人不知道为什么使用void 0我建议请阅读[link](/sf/ask/521663901/) (2认同)

Pre*_*ott 18

如果你没有做其他事情,为什么不这样做:

if (x==2) doSomething();
Run Code Online (Sandbox Code Playgroud)

  • 即使你做了别的事,你也可以做到 (4认同)

Ted*_*opp 11

使用null对于三元表达式的一个分支是好的.并且三元表达式可以作为Javascript中的语句.

但是,作为一种风格问题,如果你想要调用一个过程,使用if..else写这个更清楚:

if (x==2) doSomething;
else doSomethingElse
Run Code Online (Sandbox Code Playgroud)

或者,在您的情况下,

if (x==2) doSomething;
Run Code Online (Sandbox Code Playgroud)


Dot*_*Bot 5

这个非常非常老的线程的一个小小的补充..

让我们说你的for循环内部需要truthy/falsy用三元运算符来评估变量值,而万一falsy你想要continue- 你会遇到问题,因为你没有返回一个表达式,你会返回一个没有声明的语句任何价值.

这将产生 Uncaught SyntaxError: Unexpected token continue

 for (var i = 0; i < myArray.length; i++) {
      myArray[i].value ? alert('yay') : continue;
 }
Run Code Online (Sandbox Code Playgroud)

所以,如果你确实想要返回一个语句并仍然使用一行代码,虽然乍一看似乎有些奇怪,并且可能不遵循严格的语言用法,你可以这样做:

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