首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >"switch“语句的替代方法

"switch“语句的替代方法
EN

Stack Overflow用户
提问于 2010-02-22 03:32:19
回答 9查看 10.6K关注 0票数 24

我不想在我的代码中使用Switch,所以我正在寻找一些替代方法

使用开关的示例:

代码语言:javascript
复制
function write(what) {

  switch(what) {

    case 'Blue':
      alert ('Blue');
    break;

    ...

    case 'Red':
      alert ('Red');
    break;

  }

}

不带开关的示例:

代码语言:javascript
复制
colors = [];

colors['Blue'] = function() { alert('Blue'); };
colors['Red'] = function() { alert('Red'); };


function write(what) {

  colors[what]();

}

我的问题是:

  1. 您还知道其他什么解决方案吗?
EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-02-22 03:43:11

我只注意到您的第二种方法,即使用shouldn't use an Array来存储非数值索引(在其他语言中,您会将其称为关联数组)。

你应该使用一个简单的对象。

此外,您可能希望检查传递给write函数的what参数是否作为colors对象的属性存在,并查看它是否是函数,这样您就可以调用它而不会出现运行时错误:

代码语言:javascript
复制
var colors = {};

colors['Blue'] = function() { alert('Blue'); };
colors['Red'] = function() { alert('Red'); };


function write(what) {
  if (typeof colors[what] == 'function') {
    colors[what]();
    return;
  }
  // not a function, default case
  // ...
}
票数 23
EN

Stack Overflow用户

发布于 2012-02-15 20:46:35

我今天使用了这样的结构:

代码语言:javascript
复制
var chosenColor = 'red';

var colorString = {
    'red': 'The color is red.',
    'green': 'The color is green.',
    'blue': 'The color is blue.',
}[chosenColor] || 'The color is unknown.';

我喜欢这是一个非常少量的代码来选择一个基于选择的字符串。

你也可以把它传递给一个函数:

代码语言:javascript
复制
alert({
    'red': 'The color is red.',
    'green': 'The color is green.',
    'blue': 'The color is blue.',
}[chosenColor] || 'The color is unknown.');
票数 12
EN

Stack Overflow用户

发布于 2011-01-15 06:25:04

您可以使用对象字面量,并尝试catch来捕获默认值:

代码语言:javascript
复制
function write(what) {
    var colors = {
    'Blue': function(){ alert('Light-Blue'); },
    'Red': function(){ alert('Deep-Red'); },
    'Green': function(){ alert('Deep-Green'); }
    }
    try {colors[what]();}
    catch(err) {colors['Green']();}//default behaviour
}
write('Pink');
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2307157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档