有人在研讨会上问我这个问题,以及关于JavaScript中if-else
语句以外的其他替代方法,除了switch
之外。条件运算符是if-else
的简写吗?
答案 0 :(得分:5)
JS是一种“短语”编程语言,并严格区分表达式(值和运算符)和语句。 ?
是运算符,可以在表达式中使用:
a = x ? y : z
if
不能,因为它是一条语句:
a = if (x) ... // syntax error
另一方面,在适当的上下文中使用时,每个表达式也是一个语句:
while (1)
a = x ? y : z;
因此可以公平地说?
比if
更“广泛”,因为它可以在两种情况下使用。当然,哪一个并不意味着(应该)。
如果您对表达条件逻辑的其他方式感兴趣,则可以使用布尔运算符:
a && do_something() // "if a do_something()"
b || do_something() // "if not b do_something()"
尽管这类用途通常被认为是不良样式。
答案 1 :(得分:0)
这有点速记,但仅在从两个可能的表达式返回/获取值或对象的情况下。
示例:
// inside a function
if (condition) { return X; } else { return Y; }
// Functionally equivalent to
return condition ? X : Y;
var tmp;
if (condition) { tmp = GetFoo(123); } else { tmp = GetBar(456); }
DoSomething(tmp);
// Functionally equivalent to
DoSomething(condition ? GetFoo(123) : GetBar(456));
如果没有返回值,那么仍然存在一个等效项,但是人们可能会为此大喊大叫:
if (condition) { A(); } else { B(); }
// *shudder*
condition ? A() : B();
以下内容不可能或至少很难更改为?:
:
if (condition) { A(); return true; } else { B(); return false; }
// Reason: code blocks contain multiple statements
if (condition) { tmp = GetFoo(123); }
// Reason: no "else"-block (or you need to construct/invent one)