Почему я получаю разные результаты с "=" против "===" в JavaScript с условными (троичными) операторами? - PullRequest
1 голос
/ 07 мая 2019

Я хочу сделать программу на javascript, которая выдает «true», когда два целых числа равны, и «false», если они не равны.

Я пытался использовать знаки "=" и знак "===", но я не знаю, почему результаты программы меняются в зависимости от того, какой знак я использую, даже без изменения чисел вфункции.

Этот код выдает «false», что я и хочу:

function checkEqual(a, b) {
  return (a === b ? true : false );
}

checkEqual(1, 2);

Этот код выдает «true», а НЕ то, что я хочу:

function checkEqual(a, b) {
  return (a = b ? true : false );
}

checkEqual(1, 2);

Числа в checkEqual () одинаковы в обеих попытках, но я хочу знать, почему вторая - "true".

Ответы [ 4 ]

4 голосов
/ 07 мая 2019

= не проверяет равенство, оно используется только для присвоения.Операторы, которые проверяют равенство в JavaScript, это == (для "абстрактного" равенства) и === (для "строгого" равенства).Если a и b оба числа, == и === будут работать одинаково.

4 голосов
/ 07 мая 2019

Вы присваиваете значение a со значением b.Таким образом, a становится истинным.

Вы пытаетесь проверить с помощью оператора равенства ==.

  • = - это оператор присваивания.
  • == - оператор равенства.
  • === - оператор строгого равенства.

Посмотрите документацию для глубокого погружения.

2 голосов
/ 07 мая 2019

Первый случай (===):

function checkEqual(a, b) {
  return (a === b ? true : false );
}

checkEqual(1, 2);

Здесь вы используете оператор тождества (он же оператор строгого равенства).Он проверяет, равны ли значения (и того же типа).

Поскольку a равно 1, а b равно 2, тогда a === b становится false (так как ониразные).И конечно false ? true : false это false.Итак, все возвращается false.Да, вы можете просто сделать это:

function checkEqual(a, b) {
  return a === b;
}

checkEqual(1, 2);

Второй случай (=):

function checkEqual(a, b) {
  return (a = b ? true : false );
}

checkEqual(1, 2);

Здесь вы используете оператор присваивания.Это не проверка равенства или идентичности.

В этом случае a = b присваивает значение b a и возвращает его.Таким образом, a и b будут 2, а a = b - 2.Наконец, поскольку 2 - это истинное значение, 2 ? true : false - true.

Примечание: это также означает, что если вы передадите falsy значение для b, вы получите false.Например, при вызове: checkEqual(1, null); Значение, переданное в a, не имеет значения.


Случай, который вы не сделали (==):

function checkEqual(a, b) {
  return (a == b ? true : false );
}

checkEqual(1, 2);

Здесь вы будете использовать оператор равенства.Он проверяет, равны ли значения (однако можно свободно преобразовывать значения для проверки).

Аналогично первому, возвращается 10 *.В чем разница?Ну, типа.В Javascript "1" == 1 это true, но "1" === 1 это false.То есть, используя ==, вы позволяете среде выполнения преобразовывать значения, чтобы сравнивать их, но с === это не так.

См. Операторы сравнения JavaScript: идентичность и равенство и Какой оператор равенства (== vs ===) следует использовать в сравнениях JavaScript?

0 голосов
/ 07 мая 2019

Во втором фрагменте кода вы используете оператор присваивания = вместо одного из операторов сравнения (== или ===) , который являетсяосновная ошибка здесь.

Теперь, чтобы кратко ответить на ваш конкретный вопрос, документация сообщает, что: "The assignment operation evaluates to the assigned value."

Так, например:

a = b ? true : false  --> if b != 0, this returns true,
                      --> if b = 0, this returns false
...