Операторы сравнения в JS

Операторы сравнения в JS

В программировании часто нужно сравнивать переменные между собой. Если мы хотим знать равны ли переменные друг другу или какая из двух переменных больше, то сделать это можно с помощью операторов сравнения. Создадим две переменные x и y.


const x = 100;
const y = 100;

Оператор равно (===) / (==)

Для сравнения на строгое равенство используется тройное равно (===), а на нестрогое равенство — двойное равно (==). Как узнать, что эти две переменные равны? Запускаем следующий код в консоли и получаем ответ в качестве булевого значения (true / false). Если вернулось true, значит значение переменной x равно значению переменной y.


console.log(x === y ); // true

В этом случае для сравнения мы использовали оператор строгого равенства, поскольку у обоих переменных одинаковый тип данных — number. Но что произойдет, если у сравниваемых переменных будет разный тип данных. Число, заключенное в кавычки — это строка. Несмотря на то, что у них одинаковые значения, мы получим false. Разные типы данных нельзя сравнивать между собой.


const x = 100; // number (число)
const y = '100'; // string (строка)

console.log(x === y ); // false

Оператор двойного равенства (==) сравнивает только по значению, не обращая внимания на типы данных.


const x = 100; // number
const y = '100'; // string

console.log(x == y ); // true

const x = 100; // number
const y = 100; // number

console.log(x == y ); // true

Оператор двойного равенства (==) разрешает сравнивать между собой значения разных типов данных. В этом и есть главное отличие тройного оператора (===) от двойного (==). В программировании не рекомендуется использовать нестрогое сравнение из-за риска возникновения ошибок на пустом месте. Всегда используйте только тройное равно (===!

Оператор не равно (!==)

Оператор строгого не равно (!==) сравнивает переменные по типу и значению, оператор нестрогого не равно (!=) сравнивает только по значению, игнорируя типы (работает по аналогии с (==) и крайне нежелателен к использованию). В примере ниже, мы ожидаемо получаем false, поскольку утверждение, что x не равно y, неверно.


const x = 50; // number (число)
const y = 50; // number (число)

console.log(x !== y ); // false

При сравнении разных типов данных, данное утверждение становится верным.


const x = 50; // number (число)
const y = '50'; // string (строка)

console.log(x !== y ); // true

Оператор больше чем (>)

Утверждение, что x больше, чем y верно и возвращает нам true.


const x = 60;
const y = 50;

console.log(x > y); // true

Оператор больше или равно (>=)

А утверждение, что x больше или равен y, неверно.


const x = 40;
const y = 50;

console.log(x >= y); // false

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

Операторы меньше чем (<) и меньше или равно (<=) работают по аналогии с предыдущими двумя. Мы рассмотрели, как работают операторы сравнения на примитивных типах данных.

Сравнение массивов

Логика сравнения ссылочных типов данных (массивов и объектов) существенно отличается.

В область памяти переменной с массивом или объектом записывается не значение, а ссылка (адрес) на эту переменную. Поэтому когда мы сравниваем два абсолютно одинаковых массива, то получаем false. Они уже по своей сути не могут быть равны, ведь ссылки на них разные. Ссылочный тип данных содержит указатель на объект, а не сам объект.

Оператор равно ===


const x = [1,2,3];
const y = [1,2,3];

console.log(x === y ); // false

Необычность ситуации с ссылочным типом данных состоит в том, что при иных обстоятельствах, одинаковые массивы могут быть равны. Что имеется в виду? Мы создали переменную x и присвоили ей массив, затем в переменную y передали значение переменной x. Теперь обе переменные содержат одинаковые значения, что подтверждает возвращаемое true. Чем же эта ситуация отличается от предыдущей? Все дело в том, что в переменную x мы записали адрес на массив и передали его в переменную y. Таким образом обе переменные имеют одинаковый адрес и ссылаются на один и тот же объект, а значит они равны между собой. В первом же случае массивы были одинаковые, но адреса (ссылки) — разные. При сравнивании объектов, механизм будет точно такой же.


const x = [3,4,5];
const y = x;
console.log(y); // [3,4,5]

console.log(x === y ); // true

Источник

Просмотров:

Добавить комментарий