почему мы должны анализировать значение в состоянии переключателя, а не в условии if? - PullRequest
0 голосов
/ 09 февраля 2019

function runif() {
  let a = document.getElementById('test').value;
  if (a == 1) {
    console.log("works");
  }
}

function runswitch() {
  let a = document.getElementById('test').value;
  switch (a) {
    case 1:
      console.log("working");
      break;

    default:
      break;
  }
}

function runswitchOne() {
  let a = parseInt(document.getElementById('test').value);
  switch (a) {
    case 1:
      console.log("working");
      break;

    default:
      break;
  }
}
<form action="">
  <input type="text" id="test">
  <input type="button" onclick="runif()" value="click to check if">
  <input type="button" onclick="runswitch()" value="click to check without parseInt">
  <input type="button" onclick="runswitchOne()" value="click to check with parseInt">
</form>

Это форма, которую я создал с помощью ввода текста и двух кнопок.

В которой оператор if распознает ввод и выполняет операцию

Но в коммутаторе мне нужно разобрать, чтобы он распознал

Я не понимаю, почему это работает?Я знаю, что ввод текста дает жало, но если да, то как, если оператор if () работает без разбора?

обычно мы используем if (a == "1") для сравнения строки, а не if (a == 1)?

но даже так это работает

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Вы можете заставить его работать без разбора, просто измените ожидаемое значение в switch (1) на строку ("1"):

switch (a) {
    case "1":
        //Rest of code
}

Конечно, в *Оператор 1007 *, когда вы используете ==, это делает преобразование типов для вас (1 == "1").В switch он ведет себя как === (оператор равенства, не выполняет приведение типов).

0 голосов
/ 09 февраля 2019

Переключатель Корпус выполняет строгое сравнение (проверьте оба значения и type ).

Значение элемента имеет тип string.Внутренний переключатель case имеет тип int и не совпадает.Таким образом, без преобразования, ваш код не работает.

Но при использовании a == 1 проверяются только значения , а не type и "1" == 1 оценивается как true .Если вы выполняете строгое сравнение (например, ===), "1" === 1 оценивается как false , потому что в этом случае значение равно, а тип равноне равный.

Будет работать следующее:

switch (a) {
    case "1":
         .....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...