Javascript如果别的速记

我可以写下“如果没有其他”速记吗?

例如:

var x=1; x==2? dosomething:doNothingButContinueCode; 

我注意到为其他作品放置“空”,但我不知道为什么或如果这是一个好主意。

编辑:你们中的一些人似乎困惑,为什么我打扰尝试这个。 放心,这纯粹是出于好奇。 我喜欢用js搞乱。

这也是一个select:

 x == 2 && dosomething(); 

dosomething()只会在x == 2被调用。 这就是所谓的短路 。

在这种情况下不常用,你真的不应该这样写代码。 我鼓励这种方法,而不是:

 if(x == 2) { dosomething(); } 

你应该随时编写可读的代码; 如果您担心文件大小,只需在数千个JS压缩机之一的帮助下创build一个缩小版本。 (我推荐Google的Closure编译器 )

你有三元运算符是一个相当不寻常的使用。 通常它在一些其他操作中用作expression式而不是语句,例如:

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

所以,为了可读性(因为你在做什么是不寻常的),而且因为它避免了你不想要的“其他”,我会build议:

 if (x==2) doSomething(); 

另外一个select:

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

如果你不这样做,为什么不做:

 if (x==2) doSomething(); 

对于三元expression式的其中一个分支,使用null是很好的。 在Javascript中,三元expression式是很好的表述。

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

 if (x==2) doSomething; else doSomethingElse 

或者,在你的情况下,

 if (x==2) doSomething; 

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

让我们说你的是在一个for循环中,需要用三元运算符来评估variables的truthy/falsy值,而如果它是falsy你想continue – 你会遇到一个问题,因为你没有返回一个expression式 ,您将返回一个没有任何价值的声明

这将产生Uncaught SyntaxError: Unexpected token continue

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

所以,如果你想要返回一个语句,并且仍然使用一行代码,虽然看起来有点奇怪,并且可能不遵循严格的语言使用,但你可以这样做:

  for (var i = 0; i < myArray.length; i++) { if (myArray[i].value) alert('yay') ; else continue; } 
  • PS – 此代码可能难以阅读或理解,所以它并不总是最好的select使用。 只是说.. 🙂

从技术上讲,把零或0,或只是一些随机在那里工作(因为你没有使用返回值)。 但是,为什么你使用这个构造而不是if构造呢? 当你用这种方式编写代码的时候,你所要做的事情就不那么明显了,因为你可能会把人们弄糊涂了(你的情况为null)。