Оператор равенства в javascript
Когда мы пишем оператор if, чтобы проверить, что одна переменная равна другой мы используем двойной знак равенства == оператор сравнения.
1 2 3 |
if (a == d) { //выполнить этот код } |
В примере выше, если содержимое переменной а и содержимое переменной d окажется равным мы выполняем все то, что указано в фигурных скобках. Но на начальных этапах изучения javascript многие допускают ошибки при использовании условий равенства, и сегодня мы поговорим о возможных ошибках и их устранении.
Давайте для примера создадим пару переменных и присвоим им значение при помощи знака =
1 2 3 4 5 |
var a = 5; var b = 10; if (a = b) { //всегда правда } |
Я осознанно использовал одиночный знак = вместо двойного. Но теперь у нас проблема, давайте разберемся в чем она. Интерпретатор дойдя до оператора if прочитает в скобках выражение, как присваивание переменной а значение переменной b. И конечно такая успешная операция будет считаться истинной и код внутри фигурных скобок будет выполняться всегда, но мы ведь знаем, что это не истина и 5 далеко не равно 10! Запомните то, о чем я уже неоднократно упоминал, одиночный знак = это оператор присваивания! А вот уже == двойной знак равно, это оператор равенства. Но есть еще тройной знак равенства === и это строгое сравнение. Тройной знак равенства присутствует только у языков программирования javascript и php.
Что такое оператор строго равенства (===) и просто оператор равенства (==), для этого рассмотрим еще одной пример:
1 2 3 4 5 6 7 |
var a = 123; var b = "123"; if (a == b) { alert ("Да, они равны"); } else { alert ("Нет, они не равны"); } |
Запускаем веб страницу и получаем сообщение, что они равны. Давайте разберемся, что же произошло. В условии я использовал двойной знак равенства и хотя в переменных разного типа данные, но учитывая гибкость языка js он сравнивает их значения и находит равными. Но теперь давайте изменим двойной знак равенства на тройной:
1 2 3 4 5 6 7 |
var a = 123; var b = "123"; if (a === b) { alert ("Да, они равны"); } else { alert ("Нет, они не равны"); } |
В этом примере мы получим сообщение, что переменная а и б не равны! А все потому, что этот оператор смотрит не только значение переменной, но и ее тип, а в нашем случае типы разные у приведенных переменных. Большое количество авторов рекомендуют использовать тройной знак равно в написании кода кода javascript, я еще не на столько опытен, чтобы советовать вам, но думаю нужно смотреть по ситуации, если нужно строгое равенство ставим три равно, ели нет, тогда два.
Все операторы равенства или не равенства в javascript
- if (a == b) {… — условие простого равенства
- if (a == b) {… — условие простого не равенства
- if (a === b) {… — условие строгого равенства
- if (a !== b) {… — условие строгого не равенства
Все эти операторы, если записываются более чем одним символом не разделяются пробелом, они не делимы.
Логические и или в javascript
1 2 |
if (a === b) && c === d) {... //логическое И if (a === b) || c === d) {... //логическое или |
Во второй строке ситуация аналогична, только вместо оператора && стоит ||, что обозначает логическое или! То есть достаточно, чтобы была истина в первой или второй части условия! Следует заметить, что для удобства можно заключать отдельные части условий в скобки:
1 |
if ((a === b) && (c === d)) {... |
Это не обязательно делать, но если условия большие, это придаст гибкости и читаемости вашему коду.
Javascript даётся мне не просто. Но благодаря Вашим статьям обучение идёт лучше. Спасибо за Ваши статьи!
Всегда пожалуйста
Надо же, про тройной знак равенства я и не знал. Да, это было бы полезно в некоторых случаях. Яваскрипт хороший язык, простая лексика, всё интуитивно понятно. Лично мне не хватает нормального отладчика кода. Ну то есть у меня его вообще нет, просто пишу код в блокноте и потом смотрю, как он работает. Но в случае сложных проектов этого будет, конечно, недостаточно.
Тоже не знала о существовании тройного знака равенства, и то, что можно сравнивать переменные разных типов. В других языках для этого нужно было бы сначала преобразовать их к одному типу.