if-else语句的简写

Mee*_*eek 31 javascript if-statement

我有一些代码与很多if/else语句类似于:

var name = "true";

if (name == "true") {
    var hasName = 'Y';
} else if (name == "false") {
    var hasName = 'N';
};
Run Code Online (Sandbox Code Playgroud)

但有没有办法缩短这些陈述?像? "true" : "false"...的东西

Tus*_*har 94

使用三元:?运算符 [spec].

var hasName = (name === 'true') ? 'Y' :'N';
Run Code Online (Sandbox Code Playgroud)

三元运算符让我们可以if..else完全按照您的意愿编写速记语句.

看起来像:

(name === 'true') - 我们的条件

? - 三元运算符本身

'Y' - 条件计算结果为true时的结果

'N' - 条件计算结果为false时的结果

简而言之(question)?(result if true):(result is false),正如您所看到的 - 它返回表达式的值,因此我们可以简单地将其分配给变量,就像上面的示例一样.


Ben*_*aum 19

您可以将对象用作地图:

  var hasName = ({
        "true"  : "Y",
        "false" : "N"
  })[name];
Run Code Online (Sandbox Code Playgroud)

对于许多选项,这也可以很好地扩展

  var hasName = ({
        "true"          : "Y",
        "false"         : "N",
        "fileNotFound"  : "O"
  })[name];
Run Code Online (Sandbox Code Playgroud)

(获得参考的人的奖励点)

注意:对于指示真值的变量,您应该使用实际的布尔值而不是字符串值"true".

  • 好的解决方案 不会想到这一点.但我想使用index-operator将在机器代码中产生相同的if/elseif结构. (2认同)

Moh*_*aki 19

?: 操作员

如果你想缩短,if/else可以使用?:运算符:

condition ? action-on-true : action-on-false(else)
Run Code Online (Sandbox Code Playgroud)

例如:

let gender = isMale ? 'Male' : 'Female';
Run Code Online (Sandbox Code Playgroud)

在这种情况下,该else部分是强制性的。

我看到这种速记格式用于null/undefined检查,例如:

const avatarName = user.firstname ? user.firstname : user.lastname;
Run Code Online (Sandbox Code Playgroud)

但是在这种情况下,您可以简单地使用:

const avatarName = user.firstname ?? user.lastname;
Run Code Online (Sandbox Code Playgroud)

或者

const avatarName = user.firstname || user.lastname;
Run Code Online (Sandbox Code Playgroud)

要查看差异,请查看内容

&& 操作员

在另一种情况下,如果您只有if条件,则可以使用&&运算符:

condition && action;
Run Code Online (Sandbox Code Playgroud)

例如:

!this.settings && (this.settings = new TableSettings());
Run Code Online (Sandbox Code Playgroud)

仅供参考:您必须尽量避免使用 if-else,或者至少减少使用它,并尝试用多态性或继承来替换它。去做一个“反假设”的人吧。


Esw*_*ddy 14

试试这个

hasName = name ? 'Y' : 'N';
Run Code Online (Sandbox Code Playgroud)


Gau*_*164 5

试试像

var hasName = 'N';
if (name == "true") {
    hasName = 'Y';
}
Run Code Online (Sandbox Code Playgroud)

或者甚至尝试ternary operator

var hasName = (name == "true") ? "Y" : "N" ;
Run Code Online (Sandbox Code Playgroud)

即使只是你可以尝试像

var hasName = (name) ? "Y" : "N" ;
Run Code Online (Sandbox Code Playgroud)

由于名称具有YesNo但我不确定它。


Abi*_*tro 5

如果您two的 if-else 中只有条件,这里的大多数答案都可以正常工作。对于更多我猜你想要什么,你将使用数组。names数组中的每个名称对应的元素您将在数组中拥有一个hasNames具有完全相同索引的元素。那么就是这四行的问题了。

names = "true";
var names = ["true","false","1","2"];
var hasNames = ["Y","N","true","false"];
var intIndex = names.indexOf(name);
hasName = hasNames[intIndex ];
Run Code Online (Sandbox Code Playgroud)

此方法也可以使用对象和属性来实现,如Benjamin 所示