【发布时间】:2019-09-28 06:30:48
【问题描述】:
问题
有没有办法在三元运算符中执行return 语句?
这很奇怪,因为我觉得 三元 就像 if/else 的简写,你可以在 if/else 中执行 return 语句强>如果/否则。
但由于某种原因,我无法在 三元运算符中执行 return 语句:
常规 IF/ELSE:
// THIS WORKS
function foo() {
if (true) {
console.log('This is true');
} else {
console.log('Not true');
}
}
三元为 IF/ELSE:
// THIS ALSO WORKS
function bar() {
true ?
console.log('This is true')
: console.log('Not true');
}
上面的两个代码都可以正常工作。但是当涉及到 return 时,会发生以下情况:
带返回的常规 IF/ELSE:
// THIS WORKS
function foo() {
if (true) {
console.log('This is true');
} else {
return;
}
}
TERNARY 作为 IF/ELSE 并返回:
// THIS DOESN'T WORK
function bar() {
true ?
console.log('This is true')
: return;
}
关于可能的重复:
我环顾四周,没有找到这个确切问题的答案。
我很清楚我可以返回一个三元运算符,就像下面的一段代码,但这不是这个问题的目的。
function foo() {
return(
true ?
console.log('This is true')
: null
);
}
【问题讨论】:
-
?的右侧必须计算为表达式,但return不能计算为表达式;它必须是一个独立的声明。如果你想return,它需要在外面。 (类似地,throw不能计算为表达式,尽管您可以在 IIFE 中包含throw来抛出,而return不能这样做)回到if/else是您唯一的选项 -
"这很奇怪,因为我觉得三元就像 if/else 的简写" 好吧,它不是你真的不应该这样想。这是一个严重的过度简化,只会让你感到困惑。三元运算符总是产生两个值之一 - 就是这样。或者更正式地说,它对 three 表达式进行操作(因此 ternary - n 元表达式的特定形式)。您评估一个表达式,您根据结果执行另外两个表达式之一。
if语句只运行两个代码分支之一。他们可能在某些情况下会做同样的事情,但并不等同。 -
顺便说一句,如果您曾经使用三元组只是为了省写
if,那么您可能误用了三元组。 -
情况几乎完全相同——您试图在需要表达式的地方使用语句。为什么不允许这样做的逻辑是相同的。
-
为什么重新提出问题?当然,也许这个骗子并不完美,但that doesn't mean the question wasn't asked or answered before。 More than once。 Or twice。我们真的需要这么多悬而未决的问题吗?
标签: javascript function conditional