在有条件地获取值时,我喜欢使用三元运算符(const
),以便我可以使用// Better
const foo = x ? 'bar' : 'goo';
// Worse
var foo;
if (x) {
foo = 'bar';
} else {
foo = 'goo';
}
变量声明:
switch
我想对?:
语句做同样的事情。我可以使用一系列嵌套的const foo = x === 1 ? 'bar' : (x === 2 ? 'goo' : 'zoo');
,但这很麻烦,并且不能很好地扩展:
const foo = (() => {
switch(x) {
case 1:
return 'bar';
case 2:
return 'goo';
default:
return 'zoo';
}
})();
我甚至可以使用闭包,但这也很冗长:
switch
JavaScript中是否有{{1}} 表达式?
答案 0 :(得分:4)
首先,您应该保持可读性和可管理性。将两个或三个带有四个或五个值的条件压缩成一行几乎不可读取。
我建议采用这种非常具有说服力的方法:
let fooToBarMap = {
foo: 'bar',
baz: 42
};
let y = fooToBarMap[x] || 'default';
答案 1 :(得分:3)
在这种情况下,你所采用的方法是三元组是正确的方法。但正如你所看到的,它确实不能很好地扩展。
修复方法是使用一个返回值的函数。
function getSomething(input)
{
if(input == 1)
// return for case 1
if(input == 2)
// return for case 2
...
}
答案 2 :(得分:0)
没有。逻辑上等价的表达式可以是嵌套的三元运算符,如您所列,或者是一个类似的笨重的布尔操作数构造。
答案 3 :(得分:0)
如果时间不长,我希望||
和&&
用于此目的。
const foo = (x === 1 && 'bar') || (x === 2 && 'goo') || 'zoo'