Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can条件运算符“?”:&引用;是否被视为JavaScript中if-else语句的替代?_Javascript_If Statement_Conditional - Fatal编程技术网

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)