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 + "."); // "Привет Мир! Ты самый лучший."
Вопросы
Если у вас остались вопрос, то задавайте их в комментарии, постараюсь на них ответить.