Can条件运算符“?”:&引用;是否被视为JavaScript中if-else语句的替代?
有人在研讨会上问了我这个问题,问我除了从Can条件运算符“?”:&引用;是否被视为JavaScript中if-else语句的替代?,javascript,if-statement,conditional,Javascript,If Statement,Conditional,有人在研讨会上问了我这个问题,问我除了从开关之外,JavaScript中的if-else语句还有什么替代方案。条件运算符只是if else的简写吗?JS是一种“短语”编程语言,严格区分表达式(值和运算符)和语句?是一个运算符,可以在表达式中使用: a = x ? y : z 而如果不能,因为它是一条语句: a = if (x) ... // syntax error 另一方面,在适当的上下文中使用时,每个表达式也是一个语句: while (1) a = x ? y : z; 因
开关
之外,JavaScript中的if-else
语句还有什么替代方案。条件运算符只是if else
的简写吗?JS是一种“短语”编程语言,严格区分表达式(值和运算符)和语句<代码>?是一个运算符,可以在表达式中使用:
a = x ? y : z
而如果不能,因为它是一条语句:
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()"
尽管这样的用法通常被认为是不好的风格。它有点简写,但仅在从两个可能的表达式返回/获取值或对象的情况下使用
示例:
// inside a function
if (condition) { return X; } else { return Y; }
// Functionally equivalent to
return condition ? X : Y;
如果没有返回值,则仍然存在等价性,但人们可能会因为您这样做而尖叫:
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)
不,它是一个表达式而不是一个语句。这两个运算符并不相同,即使您经常可以将它们重写为彼此。从docs中,条件(三元)运算符是唯一接受三个操作数的JavaScript运算符。此运算符经常用作if语句的快捷方式。还值得注意的是,if-else
语句可以包含其他语句(例如return
),而trialum语句不能。事实上,你可以返回一个表达式,而不能返回一个语句。我同意你的回答,除了你给出的第一个“硬”例子。如果将变量指定给没有return
语句的函数的返回值,则会得到undefined
,这是一个合法值。那么,var d=condition?A():B()代码>实际上是可行的<代码>d
将未定义
,但条件将正确应用。还是我误解了你的意思?谢谢你是对的,它是如此的不寻常(和丑陋),以至于我忘了它。你甚至可以不需要帮助就可以做到;相应地重新措辞。
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)