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

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

console.log(10 === 10);
console.log('JavaScript' === 'JavaScript');

Результат:

true
true

Если значение или тип данных отличается, результат будет false.

Что делает оператор ===

=== сравнивает две части выражения без автоматического преобразования типов.

console.log(10 === '10');

Результат:

false

На экране значения похожи, но для JavaScript это разные вещи: 10 - число, а ‘10’ - строка.

Синтаксис

значение1 === значение2

Оператор === возвращает boolean:

  • true - значения строго равны;
  • false - значения не равны или отличаются по типу.
let result = 5 === 5;

console.log(result);

Результат:

true

Сравнение значения и типа

Строгое равенство проверяет не только содержимое, но и тип данных.

console.log(18 === 18);
console.log('18' === 18);
console.log(true === true);
console.log(true === 'true');

Результат:

true
false
true
false

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

Отличие от ==

В JavaScript есть оператор ==. Он тоже сравнивает значения, но перед сравнением может преобразовать типы.

console.log(10 == '10');
console.log(10 === '10');

Результат:

true
false

В первом случае JavaScript приводит значения к общему типу и считает их равными. Во втором случае типы разные, поэтому строгое равенство возвращает false.

На практике для равенства чаще используют ===. Так проще понимать, что именно сравнивается.

Оператор === в условиях

Оператор === часто используют внутри if.

let role = 'admin';

if (role === 'admin') {
  console.log('Открыть панель управления');
}

Код внутри if выполнится только если значение переменной role строго равно строке ‘admin’.

Еще один пример:

let answer = prompt('Сколько будет 2 + 2?');

if (Number(answer) === 4) {
  console.log('Верно');
}

prompt() возвращает строку, поэтому перед сравнением мы явно превращаем ответ в число через Number().

Объекты и массивы

С объектами и массивами === работает немного иначе, чем может показаться на первый взгляд. Он сравнивает не содержимое, а ссылку на объект.

console.log({} === {});
console.log([] === []);

Результат:

false
false

Два пустых объекта выглядят одинаково, но это два разных объекта в памяти.

Если сравнить одну и ту же ссылку, результат будет true:

let user = { name: 'Анна' };
let sameUser = user;

console.log(user === sameUser);

Результат:

true

Итого

Оператор === проверяет строгое равенство: совпадает ли значение и тип данных. Он не делает автоматическое преобразование типов, поэтому обычно понятнее и безопаснее, чем ==. В условиях === помогает точно проверить нужное значение. При сравнении объектов и массивов важно помнить, что сравнивается ссылка, а не содержимое.