Любой опытный разработчик кода знает, что небольшие различия означают большие результаты. Я помню, когда я только учился программировать (это было не так давно), я думал, что несколько знаков равенства были опечаткой. «Как «==» или «===» могут что-то означать? Я быстро понял, что у всего в коде есть цель, и все это означает разные вещи. Итак, давайте сразу приступим к делу. В чем разница между «=», «==» и «===»?

TL;DR

"=" используется для присваивания переменной
"==" используется для "свободного" сравнения на равенство, игнорируя тип данных
"== =” используется для «строгого» сравнения на равенство, учитывается тип данных

Назначение переменной

Одним из самых основных принципов кодирования является назначение переменной. Проще говоря:

переменная = значение;

Допустим, мы находимся в нашем любимом ресторане быстрого питания DacMonalds. Мы хотим заказать нашу обычную еду: 🍔, 🍟, 🥤. Теперь мы могли бы сказать официанту, что хотим заказать каждое блюдо отдельно, но это занимает много времени и лишних слов. И представьте, если бы мы повторяли одну и ту же фразу каждый раз, когда заказывали, снова и снова. Итак, чтобы сделать этот процесс короче и менее утомительным, мы можем присвоить переменной наш любимый порядок:

число1 = 🍔, 🍟, 🥤;

Итак, теперь, если и когда мы хотим сослаться на наш любимый заказ, все, что нам нужно сказать, это «номер 1» вместо заказа каждого элемента по отдельности.

Лучше быть «распущенным» или «строгим»?

Теперь, говоря о “==”по сравнению с “===”, мы говорим о выполнении и проверке на равенство в JavaScript. "==" называется "свободным" сравнением, а "===" — "строгим" сравнением. Итак, почему существует два разных типа сравнения и в чем разница?

Свободный

Допустим, мы хотим проверить равенство двух простых значений:

console.log(7 == ‘7’); // истинный

Здесь мы используем «свободное» сравнение на равенство, чтобы увидеть, равно ли число 7 строковому значению 7. И вы можете видеть, что вывод console.log — «истина». Теперь, как может числовое значение быть равным строковому значению и возвращать истину? В этом случае JavaScript сначала преобразует два сравниваемых значения в один и тот же тип данных, а затем проверит их на равенство.

Строгий

Теперь давайте возьмем тот же пример, но на этот раз с использованием «===»:

console.log( 7 === ‘7’); // ЛОЖЬ

При использовании сравнения равенства «===» мы получаем результат «false». Что изменилось? При строгом сравнении учитывается тип данных. На этот раз JavaScript сравнивает числовое значение 7 со строковым значением 7 и делает вывод, что эти типы данных НЕ совпадают, поэтому они не равны друг другу. Если мы используем один и тот же тип данных:

console.log( 7 === 7); // истинный

Выходное значение «истинно», потому что мы сравниваем один и тот же тип данных и значение, которые теперь одинаковы.

Но но НО…

В 99% случаев вы хотите использовать строгое сравнение на равенство, чтобы избежать ошибок любого типа. НО, и всегда есть но, есть сценарии, когда «вольное» сравнение идеально. За исключением случаев, когда вы используете значение null при сравнении разных объектов.

console.log(null == null); //true
console.log(null === null); //истинный

Как и следовало ожидать, использование произвольного или строгого сравнения значения null с самим собой должно привести к выводу true. Но что, если значение null не определено?

console.log(null == undefined); //true
console.log(null === undefined); //ЛОЖЬ

Здесь вы видите, что значение null будет «приблизительно» равно undefined, но если мы используем «строгое» сравнение, мы получим false. Так что это единственный случай, когда мы хотим использовать «свободное» сравнение, чтобы наше нулевое значение МОЖЕТ быть неопределенным и возвращаться как истина.