我可以在没有if else
的情况下写else
速记吗?
var x=1;
x==2 ? dosomething() : doNothingButContinueCode();
我注意到把null
用于其他工作(但我不知道为什么或者这是个好主意)。
编辑:有些人似乎很困惑为什么我会费心去尝试这个。请放心,这纯粹是出于好奇。我喜欢乱搞JavaScript。
这也是一个选择:
x==2 && dosomething();
只有在dosomething()
被评估为真时才会调用x==2
。这叫做Short-circuiting。
它不常用于这种情况,你真的不应该写这样的代码。我鼓励这种更简单的方法:
if(x==2) dosomething();
你应该随时写可读代码;如果你担心文件大小,只需在许多JS压缩器之一的帮助下创建它的缩小版本。 (例如谷歌的Closure Compiler)
你有什么是ternary operator相当不寻常的用法。通常它在一些其他操作中用作表达式而不是语句,例如:
var y = (x == 2 ? "yes" : "no");
因此,为了便于阅读(因为你正在做的事情是不寻常的),并且因为它避免了你不想要的“其他”,我建议:
if (x==2) doSomething();
另外一个选项:
x === 2 ? doSomething() : void 0;
如果你没有做其他事情,为什么不这样做:
if (x==2) doSomething();
使用null
适用于三元表达式的一个分支。并且三元表达式可以作为Javascript中的语句。
但是,作为一种风格问题,如果你想要调用一个过程,使用if..else写这个更清楚:
if (x==2) doSomething;
else doSomethingElse
或者,在您的情况下,
if (x==2) doSomething;
这个非常非常老的线程的一个小小的补充..
让我们说你在for
循环中,需要用三元运算符来评估truthy/falsy
值的变量,而如果它是falsy
你想要continue
- 你会有一个问题,因为你没有返回一个表达式,你返回而是一个没有任何价值的陈述。
这将产生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;
}
从技术上讲,将null或0或只是一些随机值设置为有效(因为您没有使用返回值)。但是,为什么使用这个结构而不是if
结构?当你以这种方式编写代码时,你试图做的事情就不那么明显了,因为你可能会把人们与no-op混淆(在你的情况下为null)。
可能是最短的
x-2||dosomething()
let x=1, y=2;
let dosomething = s=>console.log(s);
x-2||dosomething('x do something');
y-2||dosomething('y do something');