vs JavaScript开关情况下的Ruby情况

vs JavaScript开关情况下的Ruby情况,javascript,ruby,Javascript,Ruby,我来自Ruby世界,进入JavaScript世界。Ruby语言的一个特点是使用case语句来计算目标值: my_val=案例my_var 当“var1”时,则为“value1” 当“var2”时,则为“value2” 其他“价值3” 结束 #我的值计算为特定值 把我的 我可以用JavaScript做一些如上所述的简洁的事情吗?这是我得到的最接近的结果: 让myVal=null; 开关(myVar){ 案例“var1”: myVal=“value1”; 打破 案例“var2”: myVal=“v

我来自Ruby世界,进入JavaScript世界。Ruby语言的一个特点是使用
case
语句来计算目标值:

my_val=案例my_var
当“var1”时,则为“value1”
当“var2”时,则为“value2”
其他“价值3”
结束
#我的值计算为特定值
把我的
我可以用JavaScript做一些如上所述的简洁的事情吗?这是我得到的最接近的结果:

让myVal=null;
开关(myVar){
案例“var1”:
myVal=“value1”;
打破
案例“var2”:
myVal=“value2”;
打破
违约:
myVal=“value3”;
}
//我的值计算为特定值
console.log(myVal);
您的代码可以工作:

让myVal=null;
设myVar='var1';
开关(myVar){
案例“var1”:
myVal=“value1”;
打破
案例“var2”:
myVal=“value2”;
打破
违约:
myVal=“value3”;
}
//我的值计算为特定值

console.log(myVal)您可以使用具有三元值的对象来设置默认值,如下所示:

const obj={
“var1”:“value1”,
“var2”:“value2”,
“defaultVal”:“value3”//默认值
},
getVal=sVar=>obj中的sVar?obj[sVar]:obj[“defaultVal”];
//用例1:
console.log(getVal(“var1”);//从对象中获取“var1”
//用例2:

console.log(getVal(“foo”);//从对象中获取“foo”是不存在的,因此我们获取默认值
您可以使用
&&
|
中的
|

让我的_var=“var2”;
让我的妻子来=
(my_var==“var1”和&“value1”)||
(my_var==“var2”和&“value2”)||
“价值3”;
console.log(my_val);
让我的_var2=“var3”;
让我的灵魂2=
(my_var2==“var1”和“value1”)||
(my_var2==“var2”和“value2”)||
“价值3”;
console.log(my_val2)
.as控制台{背景色:黑色!重要;颜色:石灰;}
.作为控制台包装{max height:100%!important;top:0;}
,或者如果它只返回值,则可以使用

let map=新映射([[“var1”、“value1”]、[“var2”、“value2”])
const getVar=myVar=>map.has(myVar)?map.get(myVar):“value3”
//使用
设myVar='var2'
myVar=getVar(myVar)

log(myVar)
只是关于第二种方法的旁注:如果一些
var1
var2
。。。如果在对象中定义了一个
falsy
值(例如
0
),您将得到默认值,而不是定义的
falsy
值。@Shidersz您说得对。。我这样实现是因为我通常使用TypeScript,正如您所看到的,
var1
var2
string
s。。但是是的,我完全同意你。。谢谢“case statement”-它实际上是一个表达式。我只想指出它在Coffeescript中就像在Ruby中一样有效。@maxpleaner是的,我也知道。正如coffeescript与Rails携手共进。但在前端(React)开发中,coffeescript似乎并不那么流行。