我可以在没有else
的情况下编写if else
缩写吗?
var x=1;
x==2 ? dosomething() : doNothingButContinueCode();
我注意到在 else
语句中放置 null
可以工作(但我不知道为什么或者这是否是一个好主意)。
编辑: 你们中的一些人似乎对我为什么要尝试这个东西感到困惑。请放心,这纯粹是出于好奇心。我喜欢玩弄 JavaScript。
我可以在没有else
的情况下编写if else
缩写吗?
var x=1;
x==2 ? dosomething() : doNothingButContinueCode();
我注意到在 else
语句中放置 null
可以工作(但我不知道为什么或者这是否是一个好主意)。
编辑: 你们中的一些人似乎对我为什么要尝试这个东西感到困惑。请放心,这纯粹是出于好奇心。我喜欢玩弄 JavaScript。
你所写的是一种相当不常见的使用三元运算符的方式。通常情况下,它被用作表达式而非语句,嵌套在其他操作中,例如:
var y = (x == 2 ? "yes" : "no");
因为你所做的事情是不寻常的,为了可读性,同时避免你不想要的“else”,我建议:
if (x==2) doSomething();
这也是一个选项:
x==2 && dosomething();
只有当x==2
的值为真时,才会调用dosomething()
。这被称为短路运算符。
在像这样的情况下,它并不常用,你真的不应该编写这样的代码。我鼓励采用更简单的方法:
if(x==2) dosomething();
您应该始终编写易读的代码;如果您担心文件大小,只需使用众多JS压缩器之一创建其缩小版本即可。(例如Google的Closure Compiler)
if (1 - 1 === 0) $('.woot').text('Woot!');
我经常在PHP中使用这种形式,现在我也在我的JavaScript中采用它,因为我正在采用Coffeescript。 - b. e. hollenbeckdoSomething() if x === 2
。我不想念Ruby,但我确实想念那个。 - Chad Johnson另一个选择:
x === 2 ? doSomething() : void 0;
如果你没有执行else语句,为什么不这样做:
if (x==2) doSomething();
在JavaScript中,使用null
作为三元表达式的一个分支是可以的,并且三元表达式作为语句也是可以的。
然而,从风格的角度来看,如果你打算调用一个过程,使用if..else会更清晰:
if (x==2) doSomething;
else doSomethingElse
或者,根据你的情况,
if (x==2) doSomething;
这个老帖子需要一个小小的补充。
如果你在一个 for
/while
循环中使用三目运算符来计算表达式,并且希望以此结果来进行 continue
或 break
,你会遇到问题,因为 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)。
:)
- Jared Farrishfoo = bar | cat;
的东西,如果第一个是 false? null?,它会“落入”到第二个。不过我只是看到过,没有使用过。 - Jared Farrisha || b
或者a && b
,否则b
会一直被评估。 - kennytmstatement || statement
在另一侧会首先运行第一个,然后运行第二个。如果第一个是假的,则与&&
相反。||
只有在其中一个为真时才返回,因此如果第一个语句为假,则将评估第二个语句(如果在括号中),并返回它的结果。 - Muhammad Umer