javascript sintaxe Declaração de erro duplicado Const na declaração de maiúsculas e minúsculas



javascript variaveis (4)

Eu tenho o código a seguir e recebo o erro 'Declaração duplicada query_url'.

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

Entendo que o query_url está sendo declarado duas vezes, o que não está certo. Mas eu não sei como resolver isso. Alguém pode ajudar sobre qual deve ser a maneira correta de fazer isso funcionar?


Answer #1

Tente agrupar os casos em blocos:

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

Answer #2

Pessoalmente, prefiro (e tendem a abusar) o seguinte nesses tipos de casos:

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

(isso requer ES6 ou declarar "use-strict" no nó 4.x)

Atualização: Como alternativa, é muito mais compacto, dependendo se existe alguma lógica ou se é uma tarefa simples:

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

Além disso, é claro, depende da quantidade de lógica externa incorporada nessas instruções de chave!


Answer #3

Basta colocar seu switch em uma função com algumas instruções de retorno:

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

Answer #4

se query_url puder ter vários valores, dependendo da ramificação do switch, obviamente você precisará de uma variável (declare com var ou let ).

const é definido uma vez e permanece assim.

exemplo de uso com let

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




ecmascript-6