当任何情况为真时运行代码的Javascript开关情况?

当任何情况为真时运行代码的Javascript开关情况?,javascript,Javascript,我有一个标准的开关盒块: switch(variable) { case "option1": alert("Option 1"); break; case "option2": alert("Option 2"); break; } 我想运行以下代码: alert("Any Option"); 有没有一种简单的方法可以在下列情况下运行此代码:两种情况中的任何一种都匹配,而无需将代码添加到每种情况,并且无需重新检

我有一个标准的开关盒块:

switch(variable) {
    case "option1":
        alert("Option 1");
        break;
    case "option2":
        alert("Option 2");
        break;
}
我想运行以下代码:

alert("Any Option");

有没有一种简单的方法可以在下列情况下运行此代码:两种情况中的任何一种都匹配,而无需将代码添加到每种情况,并且无需重新检查“变量”(即在切换后不使用if语句)

不直接使用
切换
语句。请参阅ECMAScript 2016标准

特别是:


语言规范不包含您正在查找的功能。

不直接使用
开关
语句。请参阅ECMAScript 2016标准

特别是:


语言规范不包含您正在寻找的功能。

有一系列的真正的黑客方法来执行您建议的操作(命名为带中断/继续的do循环、带开关语句的递归函数等),但最干净的方法是使用函数,如下所示:

var variable=“option1”;
函数校验值(val){
开关(可变){
案例“选项1”:
警报(“选项1”);
返回true;
案例“选择2”:
警报(“选项2”);
返回true;
违约:
返回false;
}
}
if(校验值(变量)){
//运行公共代码
警报(“任何选项”);

}
有一大堆真正的黑客方法来做你建议的事情(命名为带break/continue的do循环,带switch语句的递归函数等等),但最干净的方法是使用函数,如下所示:

var variable=“option1”;
函数校验值(val){
开关(可变){
案例“选项1”:
警报(“选项1”);
返回true;
案例“选择2”:
警报(“选项2”);
返回true;
违约:
返回false;
}
}
if(校验值(变量)){
//运行公共代码
警报(“任何选项”);

}
带标签的块允许您随时从中突破。如果在
默认
情况下中断,则当任一情况匹配时,可以在
开关
语句之后运行一些代码,而无需根据要求重新检查变量:

let variable=prompt(“选项1或选项2”);
选择:{
开关(可变){
案例“选项1”:
警报(“选项1”);
打破
案例“选择2”:
警报(“选项2”);
打破
违约:
断开选择;
}
警报(“两个选项”);

}
带标签的块允许您随时从中突破。如果在
默认
情况下中断,则当任一情况匹配时,可以在
开关
语句之后运行一些代码,而无需根据要求重新检查变量:

let variable=prompt(“选项1或选项2”);
选择:{
开关(可变){
案例“选项1”:
警报(“选项1”);
打破
案例“选择2”:
警报(“选项2”);
打破
违约:
断开选择;
}
警报(“两个选项”);

}
为什么不创建一个由两种情况调用的函数

switch(variable) {
case "option1":
    dualAlert("Option 1");
    break;
case "option2":
    dualAlert("Option 2");
    break;
}

function dualAlert(text){
    alert(text);
    alert('Common Alert');
}

为什么不创建一个由这两种情况调用的函数呢

switch(variable) {
case "option1":
    dualAlert("Option 1");
    break;
case "option2":
    dualAlert("Option 2");
    break;
}

function dualAlert(text){
    alert(text);
    alert('Common Alert');
}

我不认为我会使用你描述的模式,尽管这样的东西可以满足你的需要

/**
 * Use this method to simulate a "finally" statement in a
 * method that resembles a switch
 *
 * @param {*} value - The value to compare
 * @param {Array<*, boolean, function>} options - The collection of switch statements
 *   First value is the value to compare against the original value
 *   Second value specifies if this statement should behave like a break at its end
 *   Third value is the action to take when the value matches
 * @param {function} finallyFn - The method which is run if any statement was executed
 */
function switchWithFinally(value, options, finallyFn) {
    var matched = false,
        breakSwitch = true;
    for(var i = 0; i < options.length; i++) {
        if(!breakSwitch || value === options[i][0]) {
            options[i][2]();
            matched = true;
            breakSwitch = options[i][1];
        }
    }
    if(matched) finallyFn();
}

/**
 * Example call, should return
 *   Option 2
 *   Option 3
 *   Any option
 */
switchWithFinally(
    'option2',
    [
        ['option1', true, function() {
            console.log('Option 1');
        }],
        ['option2', false, function() {
            console.log('Option 2');
        }],
        ['option3', true, function() {
            console.log('Option 3');
        }]
    ],
    function() {
        console.log('Any option');
    }
);
/**
*使用此方法模拟
*类似于开关的方法
*
*@param{*}value-要比较的值
*@param{Array}options-switch语句的集合
*第一个值是要与原始值进行比较的值
*第二个值指定此语句的行为是否应类似于结束处的中断
*第三个值是值匹配时要采取的操作
*@param{function}finallyFn-在执行任何语句时运行的方法
*/
函数切换WithFinally(值、选项、最终fn){
var匹配=假,
breakSwitch=true;
对于(变量i=0;i
我不认为我会使用您描述的模式,尽管如此,这样的模式可以满足您的需要

/**
 * Use this method to simulate a "finally" statement in a
 * method that resembles a switch
 *
 * @param {*} value - The value to compare
 * @param {Array<*, boolean, function>} options - The collection of switch statements
 *   First value is the value to compare against the original value
 *   Second value specifies if this statement should behave like a break at its end
 *   Third value is the action to take when the value matches
 * @param {function} finallyFn - The method which is run if any statement was executed
 */
function switchWithFinally(value, options, finallyFn) {
    var matched = false,
        breakSwitch = true;
    for(var i = 0; i < options.length; i++) {
        if(!breakSwitch || value === options[i][0]) {
            options[i][2]();
            matched = true;
            breakSwitch = options[i][1];
        }
    }
    if(matched) finallyFn();
}

/**
 * Example call, should return
 *   Option 2
 *   Option 3
 *   Any option
 */
switchWithFinally(
    'option2',
    [
        ['option1', true, function() {
            console.log('Option 1');
        }],
        ['option2', false, function() {
            console.log('Option 2');
        }],
        ['option3', true, function() {
            console.log('Option 3');
        }]
    ],
    function() {
        console.log('Any option');
    }
);
/**
*使用此方法模拟
*类似于开关的方法
*
*@param{*}value-要比较的值
*@param{Array}options-switch语句的集合
*第一个值是要与原始值进行比较的值
*第二个值指定此语句的行为是否应类似于结束处的中断
*第三个值是值匹配时要采取的操作
*@param{function}finallyFn-在执行任何语句时运行的方法
*/
函数切换WithFinally(值、选项、最终fn){
var匹配=假,
breakSwitch=true;
对于(变量i=0;i