高级开关盒
advanced switch case
我想在开关情况下使用变量。 例如,做不到。你能帮忙吗?
switch(basket,pay){
case true, true:
blah blah...
break;
case false,true:
blah blah..
break;
case false, false:
blah blah...
break;
}
你要找的是标志和位掩码。基本上,您将 myltiple 伪布尔值存储在同一个变量中,您可以访问它们的复合条件。这样做的好处是您可以将多个属性复合到单个变量中。当需要跟踪的布尔属性更多时,这尤其整洁
var FLAG_BASKET = 0x1; // 0001
var FLAG_PAY = 0x2; // 0010
//set them both to pseudo-true
var flags = FLAG_BASKET | FLAG_PAY;
switch (flags){
case 0x0://both are false
case 0x1://basket is true, pay is false
case 0x2://basket is false, pay is true
case 0x3://both are true
}
摆弄
原始问题可以用switch
来编写:
switch (true) {
case basket && pay:
// both true
break;
case basket && !pay:
// basket true, pay false
break;
case !basket && pay:
// basket false, pay true
break;
case !basket && !pay:
// basket false, pay false
break;
}
你写的是合法的JavaScript,但它并没有达到你的期望。
在表达式中,逗号的计算结果为最后一个成员。这通常用于 for 循环中,以同时初始化两个变量:
for(var i = 0, l = myArray.length; i < l; ++i) {
...
}
在开关和 case 语句中使用逗号运算符时,将丢弃第一个值,并使用最后一个值。有关示例,请参阅此小提琴:http://jsfiddle.net/UG4vf/
它不是比较两个值并找到与这两个值匹配的情况。换句话说,您的上述代码简化为:
switch(pay){
case true:
blah blah...
break;
case true:
blah blah..
break;
case false:
blah blah...
break;
}
老实说,你的switch语句似乎没有必要。 你应该可以使用一些简单的if
:
if (basket && pay) {
// code
} else if (pay) {
// code
} else {
// code
}
使用此解决方案,您可以为交换机提供多个参数:
const a = "foo";
const b = true;
const c = null;
const condition = JSON.stringify({ a, b, c });
function mySwitch(condition) {
switch (condition) {
case JSON.stringify({
a: "foo",
b: true,
c: true
}):
return 'case { a: "foo", b: true, c: null }';
case JSON.stringify({
a: "foo",
b: true,
c: null
}):
return 'case { a: "foo", b: true, c: null }';
default:
return 'default';
}
}
console.log("condition:", condition);
console.log("result:", mySwitch(condition));
除了对象作为条件之外,这也适用于数组,但是使用此解决方案的缺点是您必须将完整的开关条件值传递给开关大小写条件。例如,如果开关大小写关心属性a
和示例中b
而不是c
则此解决方案将不起作用。但是,如果您确定c
将始终对您的案例具有特定值,则可以使用此解决方案。
由于 OP 的示例代码包含每种情况的重复参数,因此此解决方案可以帮助您破解为开关提供多个参数的可能性。
相关文章:
- AngularJS ng开关或类似的动态值工作
- 基于下拉菜单创建开关
- 用于高级文本的格式化工具
- Javascript开关不工作
- 将项目履行与高级模板合并,并通过电子邮件发送至Netsuite 2.0
- 引导开关不工作
- 如何定义星期日和平日.按日期使用开关
- 学习更高级的JavaScript
- 如何隐藏高级元素
- Javascript-使用“”将toDateStringMonth从文本字符串解析为数字字符串;如果“;vs“;开关”;
- 如何将事件处理程序分配给proto.io开关
- 如何为一个搜索框实现两个高级自动补全
- 高级自定义字段按单选按钮值排序
- 高级布线和单个对象定义
- 在网格/表格中对角度进行高级过滤器
- JavaScript 中的 if 语句与开关语句
- 高级“;喜欢“;防御点击欺诈的系统
- 在运行时启动jquery-ui.toggleSwitch.js切换开关
- 更新选项卡开关/更改上的chrome扩展图标
- 高级开关盒