Разница между == и === (нестрогое/строгое равенство)?

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

1. Нестрогое равенство (==)

  • Оператор == преобразует типы данных перед сравнением. Это значит, что если два значения имеют разные типы, JavaScript попытается привести одно или оба значения к общему типу.
  • Этот процесс называется приведением типов (type coercion).

Пример:

5 == '5';   // true (строка '5' преобразуется в число 5)
true == 1;  // true (логическое true преобразуется в число 1)
null == undefined;  // true (оба считаются равными при нестрогом сравнении)

2. Строгое равенство (===)

  • Оператор === не преобразует типы данных. Он сравнивает как значения, так и их типы. Если типы не совпадают, результатом сравнения будет false.

Пример:

5 === '5';  // false (разные типы: число и строка)
true === 1; // false (разные типы: boolean и number)
null === undefined; // false (разные типы)
Операция == (нестрогое равенство) === (строгое равенство)
5 == '5' true false
0 == false true false
null == undefined true false
NaN == NaN false false
[] == false true false
'' == 0 true false
true == 1 true false
[1] == 1 true false