JavaScript有switch的表达形式吗?
Does JavaScript have an expression form of switch?
当有条件地获取一个值时,我喜欢使用三元运算符 (?:
) 这样我就可以有 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';
}
})();
JavaScript中是否有switch
表达式?
没有。逻辑上等效的表达式要么是嵌套的三元运算符,如您所列,要么是布尔操作数的类似笨拙构造。
TL;DR: 没有这样的表达式
三元可以
在这种情况下,您使用三元的方法是正确的方法。但如您所见,它确实无法很好地扩展。
但使用函数似乎更好
一个解决方法是使用一个函数,returns 你可以得到一个值。
function getSomething(input)
{
if(input == 1)
// return for case 1
if(input == 2)
// return for case 2
...
}
时间不太长的时候我喜欢用||
和&&
来达到这个目的。
const foo = (x === 1 && 'bar') || (x === 2 && 'goo') || 'zoo'
您首先应该保持内容的可读性和可管理性。将具有四个或五个值的两个或三个条件压缩到一行中几乎任何方式都不可读。
我建议使用这种非常明确的方法:
let fooToBarMap = {
foo: 'bar',
baz: 42
};
let y = fooToBarMap[x] || 'default';
当有条件地获取一个值时,我喜欢使用三元运算符 (?:
) 这样我就可以有 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';
}
})();
JavaScript中是否有switch
表达式?
没有。逻辑上等效的表达式要么是嵌套的三元运算符,如您所列,要么是布尔操作数的类似笨拙构造。
TL;DR: 没有这样的表达式
三元可以
在这种情况下,您使用三元的方法是正确的方法。但如您所见,它确实无法很好地扩展。
但使用函数似乎更好
一个解决方法是使用一个函数,returns 你可以得到一个值。
function getSomething(input)
{
if(input == 1)
// return for case 1
if(input == 2)
// return for case 2
...
}
时间不太长的时候我喜欢用||
和&&
来达到这个目的。
const foo = (x === 1 && 'bar') || (x === 2 && 'goo') || 'zoo'
您首先应该保持内容的可读性和可管理性。将具有四个或五个值的两个或三个条件压缩到一行中几乎任何方式都不可读。
我建议使用这种非常明确的方法:
let fooToBarMap = {
foo: 'bar',
baz: 42
};
let y = fooToBarMap[x] || 'default';