Нестрогое и строгое равенство
Разберитесь в сравнении с помощью == и ===.
«Нестрогое и строгое равенство» — бесплатный урок JavaScript Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения JavaScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс JavaScript Academy содержит 4 уроков всего.
Два оператора равенства
В JavaScript есть два оператора равенства. Строгое равенство (тройной знак равенства) сравнивает значения без преобразования. Нестрогое равенство (двойной знак равенства) приводит типы перед сравнением.
console.log(1 === 1)
console.log(1 == "1")Строгое равенство
Строгое равенство возвращает значение «истина» только тогда, когда совпадают и тип, и значение. Приведение типов не выполняется.
console.log(5 === 5)
console.log(5 === "5")
console.log(true === 1)Нестрогое равенство приводит типы
Нестрогое равенство пытается привести операнды к общему типу перед сравнением, что может давать неожиданные результаты «истина».
console.log(5 == "5")
console.log(true == 1)
console.log(0 == false)Число и строка
При сравнении числа и строки с помощью нестрогого равенства строка сначала преобразуется в число.
console.log("10" == 10)
console.log("10" === 10)Приведение логического значения
При нестрогом равенстве логическое значение преобразуется в число: истина становится 1, а ложь — 0 перед сравнением.
console.log(true == 1)
console.log(false == 0)
console.log(true == 2)Нулевое и неопределённое значения
Нестрогое равенство считает нулевое и неопределённое значения равными друг другу, но не равными чему-либо ещё, например нулю.
console.log(null == undefined)
console.log(null === undefined)
console.log(null == 0)Исключение NaN
NaN не равно ничему, включая само себя, ни при одном из операторов. Используйте Number.isNaN для проверки этого значения.
console.log(NaN === NaN)
console.log(NaN == NaN)
console.log(Number.isNaN(NaN))Ссылки на объекты
Объекты сравниваются по ссылке, а не по содержимому. Два разных объекта с одинаковыми свойствами никогда не бывают равны.
const a = { x: 1 }
const b = { x: 1 }
console.log(a === b)
console.log(a === a)Неожиданные результаты нестрогого равенства
Нестрогое равенство может давать результаты, противоречащие интуиции. Пустая строка равна нулю, а пустой массив после приведения равен ложному значению.
console.log("" == 0)
console.log([] == false)
console.log("0" == false)Отдавайте предпочтение строгому равенству
Большинство руководств по стилю рекомендует по умолчанию использовать строгое равенство, чтобы избежать скрытых ошибок приведения типов. Используйте нестрогое равенство только при наличии осознанной причины.
const value = "42"
if (value === "42") {
console.log("matched as string")
}Проверка на нулевое или неопределённое значение
Одно из общепринятых применений нестрогого равенства — одновременная проверка на нулевое и неопределённое значения, поскольку такой шаблон охватывает оба случая.
function check(v) {
if (v == null) {
return "missing"
}
return "present"
}
console.log(check(undefined))
console.log(check(0))Быстрая проверка
Проверьте свои знания о равенстве.
Повторение
Повторение: Тройное равенство избегает приведения типов, а двойное равенство его выполняет.
- Строгое равенство проверяет тип и значение
- Нестрогое равенство сначала приводит значения к общему типу
- Нулевое значение равно неопределённому при нестрогом сравнении и только при нём
- По умолчанию отдавайте предпочтение строгому равенству
console.log(1 === 1)
console.log(1 == "1")Часто задаваемые вопросы
Урок «Нестрогое и строгое равенство» бесплатный?
Да — полный текст урока «Нестрогое и строгое равенство» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс JavaScript Academy, подпишись на CoddyKit PRO. Курс JavaScript Academy содержит 4 уроков всего.
Чему я научусь в уроке «Нестрогое и строгое равенство»?
Разберитесь в сравнении с помощью == и ===. Ты практикуешь JavaScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать JavaScript Academy?
Предыдущий опыт не требуется. JavaScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Нестрогое и строгое равенство»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке JavaScript Academy?
Да. Каждый урок JavaScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Истинные и ложные значения
- Нестрогое и строгое равенство
- Неявное приведение типов в операциях
- Приёмы явного преобразования