我可以写if else
没有的速记else
吗?
var x=1;
x==2 ? dosomething() : doNothingButContinueCode();
我注意到null
为 else 工作(但我不知道为什么或这是否是个好主意)。
编辑:你们中的一些人似乎对我为什么要费心尝试这个感到困惑。请放心,这纯粹是出于好奇。我喜欢玩弄 JavaScript。
我可以写if else
没有的速记else
吗?
var x=1;
x==2 ? dosomething() : doNothingButContinueCode();
我注意到null
为 else 工作(但我不知道为什么或这是否是个好主意)。
编辑:你们中的一些人似乎对我为什么要费心尝试这个感到困惑。请放心,这纯粹是出于好奇。我喜欢玩弄 JavaScript。
您所拥有的是对三元运算符的相当不寻常的使用。通常它在其他一些操作中用作表达式,而不是语句,例如:
var y = (x == 2 ? "yes" : "no");
因此,为了可读性(因为您所做的事情不寻常),并且因为它避免了您不想要的“其他”,我建议:
if (x==2) doSomething();
这也是一种选择:
x==2 && dosomething();
dosomething()
x==2
只有在被评估为真时才会被调用。这称为短路。
它在这种情况下不常用,您真的不应该编写这样的代码。我鼓励这种更简单的方法:
if(x==2) dosomething();
您应该始终编写可读的代码;如果您担心文件大小,只需借助众多 JS 压缩器之一创建它的缩小版本。(例如 Google 的Closure Compiler)
另外一个选项:
x === 2 ? doSomething() : void 0;
如果你不做其他,为什么不做:
if (x==2) doSomething();
null
对于三元表达式的其中一个分支,使用是很好的。并且三元表达式可以作为 Javascript 中的语句。
不过,就风格而言,如果您考虑调用一个过程,那么使用 if..else 来编写它会更清楚:
if (x==2) doSomething;
else doSomethingElse
或者,在你的情况下,
if (x==2) doSomething;
这个旧线程的一个小补充..
如果您正在使用三元运算符评估for
/while
循环内的表达式并且想要continue
orbreak
作为结果 - 您将遇到问题,因为continue
&break
都不是表达式;它们是没有任何价值的陈述。
这将产生Uncaught SyntaxError: Unexpected token continue
for (const item of myArray) {
item.value ? break : continue;
}
如果你真的想要一个返回语句的单行,你可以使用它来代替:
for (const item of myArray) {
if (item.value) break; else continue;
}
从技术上讲,将 null 或 0 或只是一些随机值放在那里是有效的(因为您没有使用返回值)。但是,您为什么使用此构造而不是if
构造?当您以这种方式编写代码时,您要尝试做什么就不太明显了,因为您可能会将人们与无操作(在您的情况下为 null)混淆。