почему этот простой оператор switch всегда выполняет значение по умолчанию - PullRequest
0 голосов
/ 16 июня 2019

Хорошо, ребята, кажется, что это утверждение switch навсегда обречено НЕ работать.

Первоначальная идея состояла в том, чтобы создать переменную x, которая является приглашением, пользователь должен будет выбрать ввод любого числа, которое будет значением x.

Тогда в первом случае коммутатора, если x меньше 0,5, он будет просто console.log "less". Если x больше 0,5, он будет просто console.log «more». Если по какой-то причине программа не работает должным образом, по умолчанию используется console.log "это значение по умолчанию"

Затем в конце я добавил console.log из x, чтобы узнать, какой номер ввел пользователь.

Давайте попробуем!

Я пытался и пытался, и независимо от того, какой номер я ввожу, он всегда печатал «это по умолчанию». Затем напечатали значение х.

Я закончил тем, что пошел к Рэмбо, удалил подсказку и объявил х равным 0,6. Это должно напечатать «больше», но это все еще не.

var x = 0.6;

switch (x) {
  case x < 0.5:
    console.log("less");
    break;
  case x > 0.5:
    console.log("more");
    break;

  default:
    console.log("its the dflt");
};

console.log(x);

Так что мне интересно, что не так с этим кодом. Помощь

Ответы [ 3 ]

5 голосов
/ 16 июня 2019

switch сравнивает то, с чем вы switch сравниваетесь с case с.Таким образом, если у вас есть case x < 0.5:, который вы хотите запустить, этот случай будет выполняться, если выражение, против которого вы switched было true:

var x = 0.6;

switch (true) {
  case x < 0.5:
    console.log("less");
    break;
  case x > 0.5:
    console.log("more");
    break;

  default:
    console.log("its the dflt");
};

console.log(x);

Если вы switch против самого x, case будет запускаться только в том случае, если дело оценивается в том же значении, что и x, что здесьсоставляет 0.6, например:

var x = 0.6;

switch (x) {
  case 0.6:
    console.log('x is exactly 0.6');
    break;
  default:
    console.log("x is something other than 0.6");
};

console.log(x);

Но это совсем не гибко и не то, что вы хотите.

Лично я бы предпочел if / else,его намного легче читать (и, как отмечается в комментариях, намного быстрее):

var x = 0.6;
if (x < 0.5) {
    console.log("less");
} else if (x > 0.5) {
    console.log("more");
} else {
    console.log('neither less nor more; equal or NaN');
}
0 голосов
/ 16 июня 2019

CertainPerformance очень хорошо ответил на ваш вопрос, однако, если вы все еще не понимаете, как использовать коммутатор, я бы порекомендовал вам использовать «операторы if», пока у вас не будет времени прочитать больше об использовании коммутатора.

var x = 0.6;

if (x < 0.5) {
  console.log("less");
}
else if (x > 0.5) {
  console.log("more");
}
else {
  console.log("its the dflt");
}

console.log(x);

Надеюсь, вам будет проще:)

0 голосов
/ 16 июня 2019

Переключатель сравнивает значение x со значением дел. В вашем коде x < 0.5 оценивается как true. Вместо того, чтобы переходить к этому случаю, как к операторам if, регистр переключателя сравнивает x и true. Поскольку x - это число, x никогда не будет равно true, поэтому всегда используется регистр по умолчанию.

В этом случае я бы использовал операторы if вместо switch. Переключатели лучше подходят для перечислений (проверка, является ли x конкретным значением из набора значений, а не диапазона значений)

...