当任何情况为真时运行代码的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