Зачем использовать тройное равенство в JavaScript?

«Определение, эквивалентны ли 2 переменные, является одним из наиболее важных операций в программировании» — Nicholas Zakas.

Другими словами, в вашем скрипте вы можете написать так:

if (x == y) {
	// do something here
}

Или, если вы хотите писать хорошие скрипты, делайте так:

if (x === y) {
	// do something here
}

Разница между этими двумя примерами в том, что во втором примере используется тройное сравнение, которое по-другому называют «строгое равенство» или «тождественное равенство».

Начинающие программисты JavaScript могут использовать тройное сравнение вместо двойного, но, возможно, они не до конца понимают, почему так важно использовать тройное равенство.

 

В чем разница?

Если сравнение с помощью двойного равно, то результат будет true, если две переменные равны. Но есть одна важная загвоздка: если сравнение делается между двумя переменными различных «типов», произойдет приведение типов.

Каждое значение JavaScript имеется свой специальный тип. Типы бывают: число, строка, булевый тип, функция, и объект. Поэтому, если вы попытаетесь сравнить строку с числом, браузер попытается конвертировать строки в число до того, как произойдет сравнение. Аналогично, если сравнение true и false с числом, true и false будут конвертированы в число 1 и 0 соответственно.

Это может привести к неожиданным результатам. Приведем несколько примеров:

console.log(99 == "99"); // true
console.log(0 == false); // true

Хотя это первоначально и может выглядеть правильно, это может привести к некоторым проблемам. Для примера:

console.log(' \n\n\n' == 0); // true
console.log(' ' == 0); // true

В таких случаях большинство JavaScript экспертов рекомендуют всегда использовать тройное равенство и никогда не использовать двойное.

Оператор тройного сравнения никогда не делает приведение типов. Поэтому, когда вы используете тройное сравнение, вы сравниваете фактические значения.

Это означает, что использование тройного равенство во всех случаях выше вернуло бы правильный результат:

console.log(99 === "99"); // false
console.log(0 === false); // false
console.log(' \n\n\n' === 0); // false
console.log(' ' === 0); // false

 

 Что насчет неравенства?

При выполнении оператора не-равно к выражению, применяются те же правила. Только на этот раз, нужно использовать двойные равно против одного.

Вот несколько примеров с использованием оператора !=.

console.log(99 != "99"); // false
console.log(0 != false); // false
console.log(' \n\n\n' != 0); // false
console.log(' ' != 0); // false

Заметьте, что везде вернулась обращенное значение true, т.к. произошло приведение типов.

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

console.log(99 !== "99"); // true
console.log(0 !== false); // true
console.log(' \n\n\n' !== 0); // true
console.log(' ' !== 0); // true

 

Заключение

Как уже упоминалось, вы, вероятно, уже использовали тройное равно, но повторить заново всегда полезно. При изучении данной статьи, я сам узнал об этой концепции много нового.

Вот, что говорит Zakas о тройном равенстве: «. Это помогает поддерживать целостность данных типа во всем коде».

 

Спасибо за внимание!

Подписываемся на рассылку!

 

Автор статьи: Alex. Категория: JavaScript
Дата публикации: 14.05.2013