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

我可以在没有else的情况下编写if else简写吗?

var x=1;


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

我注意到将null用于else工作(但我不知道为什么或这是否是一个好主意)。

你们中的一些人似乎很困惑,为什么我要麻烦地尝试这个。放心,这纯粹是出于好奇。我喜欢摆弄JavaScript。

668306 次浏览

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

if (x==2) doSomething();

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

不过,从风格上讲,如果你想调用一个过程,使用if..else更清楚:

if (x==2) doSomething;
else doSomethingElse

或者,就你来说,

if (x==2) doSomething;

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

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

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

所以,为了可读性(因为你所做的是不寻常的),并且因为它避免了你不想要的“else”,我建议:

if (x==2) doSomething();

这也是一个选项:

x==2 && dosomething();

dosomething()只有在x==2被赋值为true时才会被调用。这被称为短路

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

if(x==2) dosomething();

你应该始终编写可读的代码;如果你担心文件的大小,只需在众多JS压缩器的帮助下创建一个缩小版本。(例如谷歌的关闭编译器)

另一个选择:

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

一个小的添加到这个老线程..

如果你正在用三元运算符计算for/while循环中的表达式,并希望结果是continuebreak——你将会遇到一个问题,因为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;
}
  • 附注:这段代码可能会引起一些质疑。只是说. .:)

可能是最短的(基于或运算符及其优先级)

x-2||dosomething()

let x=1, y=2;
let dosomething = console.log;


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