Каждый раз когда ты входишь в аккаунт на каком-то сайте, сервер сравнивает введённый пароль с сохранённым. Когда Ozon проверяет хватает ли баллов на скидку — сравнивает числа. Операторы сравнения — это основа любой логики в программировании.
Мы уже знаем типы данных и переменные. Сравнения работают с этими данными и возвращают boolean: true или false.
Без сравнений программа не может принимать решения. Нужно проверить: пользователь совершеннолетний? Хватает ли денег? Совпадает ли промокод? Всё это — сравнения.
| Оператор | Значение | Пример |
|----------|----------|--------|
| === | строгое равенство (тип + значение) | 5 === 5 → true |
| !== | строгое неравенство | 5 !== 6 → true |
| > | больше | 10 > 5 → true |
| < | меньше | 3 < 7 → true |
| >= | больше или равно | 5 >= 5 → true |
| <= | меньше или равно | 4 <= 3 → false |
Двойное равенство == делает неявное приведение типов — пытается угадать что ты имеешь в виду. Это приводит к неожиданным результатам:
0 == false // true — ноль приравнивается к false
0 === false // false — разные типы, правильно!
'' == false // true — пустая строка тоже falsy
'' === false // false — правильно
null == undefined // true — специальное правило ==
null === undefined // false — правильноЗапомни: используй === и !== всегда. == и != — только если знаешь зачем (редко нужно).
Строки сравниваются по алфавиту (точнее по Unicode-кодам):
'apple' < 'banana' // true
'Яблоко' > 'Апельсин' // true (Я > А)
'10' > '9' // false! '1' < '9' в строковом сравнении
10 > 9 // true — числовое сравнениеОшибка 1: = вместо === (присваивание вместо сравнения)
let isAdmin = false
if (isAdmin = true) { // Это присваивание! Всегда true!
console.log('доступ открыт') // выполнится всегда
}
// Правильно:
if (isAdmin === true) { ... }
// Или просто:
if (isAdmin) { ... }Ошибка 2: Сравнивать число со строкой через ===
const input = '18' // пришло из формы как строка
input === 18 // false — разные типы
Number(input) === 18 // true — правильно, преобразовалиОшибка 3: Использовать == для null-проверок
const value = 0
if (value == false) console.log('пусто') // выполнится! 0 == false
if (value === false) console.log('пусто') // не выполнится — правильноОператоры сравнения — строительные блоки любой валидации: проверка форм, авторизация, фильтрация данных. Ошибка с == вместо === — классический источник багов, которые сложно найти.
Система проверок при оформлении заказа
const user = {
age: 20,
balance: 3500,
bonusPoints: 250,
promoCode: 'SALE2025',
}
const movie = { minAge: 18, price: 299 }
const minOrderForBonus = 2000
const correctPromo = 'SALE2025'
// Проверки через строгое сравнение
const ageAllowed = user.age >= movie.minAge
console.log('Возраст ок:', ageAllowed) // true
const canAfford = user.balance >= movie.price
console.log('Денег хватает:', canAfford) // true
const promoValid = user.promoCode === correctPromo
console.log('Промокод верный:', promoValid) // true
const bonusEligible = user.balance >= minOrderForBonus
console.log('Бонус за заказ:', bonusEligible) // true
// Показываем почему === лучше ==
console.log('1000 == true:', 1000 == true) // false (интересно!)
console.log('1 == true:', 1 == true) // true (неожиданно?)
console.log('1 === true:', 1 === true) // false (правильно!)Каждый раз когда ты входишь в аккаунт на каком-то сайте, сервер сравнивает введённый пароль с сохранённым. Когда Ozon проверяет хватает ли баллов на скидку — сравнивает числа. Операторы сравнения — это основа любой логики в программировании.
Мы уже знаем типы данных и переменные. Сравнения работают с этими данными и возвращают boolean: true или false.
Без сравнений программа не может принимать решения. Нужно проверить: пользователь совершеннолетний? Хватает ли денег? Совпадает ли промокод? Всё это — сравнения.
| Оператор | Значение | Пример |
|----------|----------|--------|
| === | строгое равенство (тип + значение) | 5 === 5 → true |
| !== | строгое неравенство | 5 !== 6 → true |
| > | больше | 10 > 5 → true |
| < | меньше | 3 < 7 → true |
| >= | больше или равно | 5 >= 5 → true |
| <= | меньше или равно | 4 <= 3 → false |
Двойное равенство == делает неявное приведение типов — пытается угадать что ты имеешь в виду. Это приводит к неожиданным результатам:
0 == false // true — ноль приравнивается к false
0 === false // false — разные типы, правильно!
'' == false // true — пустая строка тоже falsy
'' === false // false — правильно
null == undefined // true — специальное правило ==
null === undefined // false — правильноЗапомни: используй === и !== всегда. == и != — только если знаешь зачем (редко нужно).
Строки сравниваются по алфавиту (точнее по Unicode-кодам):
'apple' < 'banana' // true
'Яблоко' > 'Апельсин' // true (Я > А)
'10' > '9' // false! '1' < '9' в строковом сравнении
10 > 9 // true — числовое сравнениеОшибка 1: = вместо === (присваивание вместо сравнения)
let isAdmin = false
if (isAdmin = true) { // Это присваивание! Всегда true!
console.log('доступ открыт') // выполнится всегда
}
// Правильно:
if (isAdmin === true) { ... }
// Или просто:
if (isAdmin) { ... }Ошибка 2: Сравнивать число со строкой через ===
const input = '18' // пришло из формы как строка
input === 18 // false — разные типы
Number(input) === 18 // true — правильно, преобразовалиОшибка 3: Использовать == для null-проверок
const value = 0
if (value == false) console.log('пусто') // выполнится! 0 == false
if (value === false) console.log('пусто') // не выполнится — правильноОператоры сравнения — строительные блоки любой валидации: проверка форм, авторизация, фильтрация данных. Ошибка с == вместо === — классический источник багов, которые сложно найти.
Система проверок при оформлении заказа
const user = {
age: 20,
balance: 3500,
bonusPoints: 250,
promoCode: 'SALE2025',
}
const movie = { minAge: 18, price: 299 }
const minOrderForBonus = 2000
const correctPromo = 'SALE2025'
// Проверки через строгое сравнение
const ageAllowed = user.age >= movie.minAge
console.log('Возраст ок:', ageAllowed) // true
const canAfford = user.balance >= movie.price
console.log('Денег хватает:', canAfford) // true
const promoValid = user.promoCode === correctPromo
console.log('Промокод верный:', promoValid) // true
const bonusEligible = user.balance >= minOrderForBonus
console.log('Бонус за заказ:', bonusEligible) // true
// Показываем почему === лучше ==
console.log('1000 == true:', 1000 == true) // false (интересно!)
console.log('1 == true:', 1 == true) // true (неожиданно?)
console.log('1 === true:', 1 === true) // false (правильно!)Ты разрабатываешь систему проверки для стриминга: пользователь 17 лет хочет смотреть фильм 18+. У него есть подписка и баланс 500 рублей, фильм стоит 299 руб. Напиши три проверки и выведи их результаты.
Для сравнения возраста: userAge >= minAge. Для проверки boolean-переменной: hasSubscription === true (или просто hasSubscription)