Разница между «==» и «===» в JavaScript

· JavaScript и Снипеты · 2 мин чтения

JavaScript язык с загадкой и я вас понимаю, потому что сам прошел по этому пути. В этой короткой записи, я хочу поговорить про разницу между == и === (двойными и тройными) операторами сравнения в JavaScript и покажу разницу на двух примерах. 

=== ведет себя точно так же как и ==, только первый еще сравнивает тип переменной.

== сравнит значения

=== сравнит переменные и потом сравнит их типы и если они различаются, то вернет false

Пример 1

Основное различие вы можете посмотреть в примере ниже.

'' == '0'           // false
0 == ''             // true
0 == '0'            // true

false == 'false'    // false
false == '0'        // true

false == undefined  // false
false == null       // false
null == undefined   // true

' \t\r\n ' == 0     // true

Пример 2

А вот еще отличный вариант примера для сравнения.

var a = [1,2,3];
var b = [1,2,3];

var c = { x: 1, y: 2 };
var d = { x: 1, y: 2 };

var e = "текст";
var f = "тек" + "ст";

a == b            // false
a === b           // false

c == d            // false
c === d           // false

e == f            // true
e === f           // true

Особый случай — когда вы сравниваете литерал с объектом, который вычисляет тот же литерал, из-за метода toString или valueOf. Например, рассмотрим сравнение строкового литерала со строковым объектом, созданным с помощью конструктора String.

"абв" == new String("абв")    // true
"абв" === new String("абв")   // false

Обратите внимание, что == возвращает true, а === возвращает false. Это происходит из-за того, что типы переменных разные.

Моё решение этой проблемы — это не использовать String конструкторы для создания строчных переменных.

Инициализируйте переменные простым, «дедовским» способом, как это показано в примере ниже.

var string = "Привет, Мир!"; 
var a = " Ты самый лучший";

console.log(string + a + "."); // "Привет Мир! Ты самый лучший."

Вопросы

Если у вас остались вопрос, то задавайте их в комментарии, постараюсь на них ответить.