是否可以将条件运算符“?:”视为JavaScript中if-else语句的替代方法?

时间:2018-11-05 09:20:06

标签: javascript if-statement conditional

有人在研讨会上问我这个问题,以及关于JavaScript中if-else语句以外的其他替代方法,除了switch之外。条件运算符是if-else的简写吗?

2 个答案:

答案 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)