在Switch Case语句中出现重复的Const声明错误

时间:2016-03-02 11:48:42

标签: javascript ecmascript-6

我有以下代码,我收到错误'重复声明query_url'。

  switch(condition) {
    case 'complex':
      const query_url = `something`;
      break;
    default:
      const query_url = `something`;
      break;
  }

我知道query_url被声明了两次,这是不对的。但我不知道如何解决这个问题。有人可以帮助确定这项工作的正确方法吗?

6 个答案:

答案 0 :(得分:263)

尝试用块包装案例:

switch(condition) {
  case 'complex': {
    const query_url = `something`;
    … // do something
    break;
  }
  default: {
    const query_url = `something`;
    … // do something else
    break;
  }
}

答案 1 :(得分:11)

在这种情况下,我个人更喜欢(并且倾向于滥用)以下内容:

const query_url = (()=>
{
     switch(condition)
           case 'complex': return 'something';
           default       : return 'something-else';
})();

(这需要ES6或在Node 4.x中声明“use-strict”)

更新:或者,更紧凑,取决于是否有任何逻辑,或者它是一个简单的任务:

const query_url = {complex : 'something'}[condition] || 'something-else';

当然,还取决于那些switch语句中嵌入的外部逻辑的数量!

答案 2 :(得分:7)

如果query_url可以有多个值,具体取决于切换分支,显然您需要一个变量(使用varlet声明)。

const设置一次并保持这种状态。

使用let

的示例用法
let query_url = '';
switch(condition) {
  case 'complex':
    query_url = `something`;
    break;
  default:
    query_url = `something`;
    break;
}

答案 3 :(得分:2)

您可以使用{}来确定开关盒的大小。

对于您的情况,您需要返回变量,只要var存在并且可以在花括号之间访问即可:

 switch(condition) {
    case 'complex': {
      const query_url = `something`;
      return query_url;
    }
    default: {
      const query_url = `something`;
      return query_url;
    }
  }

如果您不使用return ,则必须在switch语句上方声明let query_url

答案 4 :(得分:1)

只需将switch放入带有一些返回语句的函数中:

var condition;
function aSwitch(condition){
switch(condition) {
    case 'complex':
      return 'something';
    default:
      return 'something';
  }
}
const query_url = aSwitch(condition);

答案 5 :(得分:1)

const query_url={
  complex:'something complex',
  other:'other thing'
}[condition]

缺点是,您不能使用对象默认,您需要对条件进行额外检查。