Javascript if-else语句的简写
我有一些代码,其中包含许多类似于以下内容的if/else语句:Javascript if-else语句的简写,javascript,if-statement,Javascript,If Statement,我有一些代码,其中包含许多类似于以下内容的if/else语句: var name = "true"; if (name == "true") { var hasName = 'Y'; } else if (name == "false") { var hasName = 'N'; }; 但有没有办法缩短这些陈述?类似于?“真”:“假”…试试看 var hasName = 'N'; if (name == "true") { hasName = 'Y'; } 甚至可以
var name = "true";
if (name == "true") {
var hasName = 'Y';
} else if (name == "false") {
var hasName = 'N';
};
但有没有办法缩短这些陈述?类似于?“真”:“假”
…试试看
var hasName = 'N';
if (name == "true") {
hasName = 'Y';
}
甚至可以尝试使用三元运算符
var hasName = (name == "true") ? "Y" : "N" ;
即使是简单的,你也可以像这样尝试
var hasName = (name) ? "Y" : "N" ;
因为name有是
或否
,但我不确定。使用
三元运算符允许我们编写与您想要的完全相同的速记if..else
语句
它看起来像:
(name=='true')
-我们的条件
?
-三元运算符本身
'Y'
-如果条件计算结果为true,则为结果
'N'
-条件计算为false时的结果
简言之,如您所见,它返回表达式的值,这样我们就可以像上面的示例一样简单地将其分配给变量。您可以使用对象作为映射:
var hasName = ({
"true" : "Y",
"false" : "N"
})[name];
这也可以很好地扩展许多选项
var hasName = ({
"true" : "Y",
"false" : "N",
"fileNotFound" : "O"
})[name];
(获得推荐人的奖励积分)
注意:对于表示真值的变量,应该使用实际布尔值,而不是字符串值“true”。试试这个
hasName = name ? 'Y' : 'N';
如果您的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 ];
此方法也可以使用对象和属性来实现。尝试此方法
速记方法:
let variable1='';
设variable2=variable1 | |“new”
console.log(变量2);//新的
?:运算符
如果要缩短If/Else,可以使用?:
运算符作为:
condition ? action-on-true : action-on-false(else)
condition && action;
例如:
let gender = isMale ? 'Male' : 'Female';
!this.settings && (this.settings = new TableSettings());
在这种情况下,else
部分是必需的
&操作员
在另一种情况下,如果只有if
条件,则可以使用&&
运算符作为:
condition ? action-on-true : action-on-false(else)
condition && action;
例如:
let gender = isMale ? 'Male' : 'Female';
!this.settings && (this.settings = new TableSettings());
仅供参考:您必须尽量避免使用if-else或至少减少使用它,并尝试使用或继承替换它。做一个家伙。这与jQuery无关,jQuery是一个用于JavaScript的DOM操作库。为什么要使用“true”一词,而不是布尔值
true
?很抱歉,这可能与我的问题不同。它的伸缩性不是很好,请看我的答案或@BenjaminGruenbaum回答几个原因,首先,你混合了“
和”
,这就产生了一个错误的概念,即它们以某种方式表示不同的东西。其次,使用=
运算符。此外,内联三元块比if语句更难读取(我更喜欢原始代码)并且不要在很多公司通过代码审查。另外,您的间距已关闭。@TusharGupta谢谢,伙计。@TusharGupta谢谢您修复它,我已经做了一些澄清(特别是格式化和添加到规范和参考的链接)。请随意还原您不喜欢的任何更改。@Adam-使用三个符号要求值的类型和值相同,而使用两个符号将在检查值之前进行转换:2=='2'将计算为true,即使一个是字符串,另一个是数字。2=='2'将计算为false,因为e这两个值不是同一类型。如果您需要,请在此快速演示:)(当然,地图不必是匿名的,如果您命名的话,这对于大多数不明显的情况下的可读性更好,可读代码比较短的代码更重要。虽然我们都希望编写简洁的代码,但它不应该以牺牲清晰性为代价)很好的解决方案!我没有想到。但我猜使用索引运算符将在机器代码中产生相同的if/elseif构造。@这取决于实现,但它们在智能运行时也同样快:)我使用此构造来代替开关…字符串上的大小写很多。我认为带字符串的开关LD可能同样快/慢。在任何其他情况下(整数,布尔值),开关会更快,因为CPU的ALU可以轻松地处理它。如果您必须在JavaScript中考虑这一点,我不知道。