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
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".
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,或者至少减少使用它,并尝试用多态性或继承来替换它。去做一个“反假设”的人吧。
试试像
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)
由于名称具有Yes
或No
但我不确定它。
如果您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 所示。
归档时间: |
|
查看次数: |
109208 次 |
最近记录: |