Первый случай (===
):
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?