Строгий режим и базовые ошибки новичков
Строгий режим и базовые ошибки новичков
Технический фундамент strict-дисциплины
'use strict' делает поведение языка менее двусмысленным:
- запрещает часть опасных "молчаливых" сценариев;
- превращает скрытые проблемы в явные ошибки;
- повышает предсказуемость работы переменных и контекста;
- лучше сочетается с современными практиками (
const/let, строгие сравнения, линтеры).
Это не "дополнение", а базовый режим для надежного прикладного кода.
Зачем включать строгий режим
В обычном режиме JavaScript иногда "прощает" опасные вещи: неявные глобальные переменные, некоторые тихие преобразования, неочевидные ошибки в контексте this. Это может выглядеть удобно на старте, но в реальном проекте приводит к трудным багам. Строгий режим ('use strict') делает поведение языка более безопасным и предсказуемым.
Ключевой момент: strict mode помогает ловить ошибки раньше и делает код менее двусмысленным.
Проверь себя: почему "тихое исправление" движком иногда вреднее, чем явная ошибка?
Как включить strict mode
'use strict';
const score = 80;
console.log(score);
Строка 'use strict' должна быть в начале файла или функции.
Важно: в ES-модулях strict mode включен автоматически, но понимать правила все равно нужно.
После включения некоторые конструкции, раньше "терпимые", становятся ошибками - и это плюс для качества.
Типичная ошибка №1: неявная глобальная переменная
'use strict';
function setMode() {
mode = 'dark'; // ReferenceError
}
Без strict mode это могло случайно создать глобальную переменную mode. В строгом режиме ты сразу получаешь ошибку и исправляешь источник проблемы.
Анти-провал: всегда объявляй переменные явно через const или let.
Типичная ошибка №2: слабые сравнения
Новички часто используют ==, не учитывая приведение типов.
console.log(0 == false); // true
console.log('' == 0); // true
Без четкого понимания это приводит к ошибочным условиям. В прикладном коде чаще используй === и !==.
console.log(0 === false); // false
Смотри, что важно: strict mode не заменяет ===, но вместе с ним формирует более строгую дисциплину.
Типичная ошибка №3: работа с "грязным" вводом
Пользовательский ввод почти всегда строка. Если не нормализовать данные, получишь баги на границах.
'use strict';
const rawAge = '18';
const age = Number(rawAge);
const canAccess = age >= 18;
Если rawAge = 'abc', Number(rawAge) даст NaN, и условие начнет вести себя иначе, чем ожидаешь.
Правильнее сразу делать проверку на NaN:
const rawAge = '18';
const age = Number(rawAge);
if (Number.isNaN(age)) {
console.log('invalid-age');
} else {
console.log(age >= 18);
}
Проверь себя: почему проверка Number.isNaN(age) полезна перед сравнением?
Мини-сценарий: валидатор шага
Представь проверку перед переходом на следующий урок:
- есть авторизация (
isAuth); - возраст (
age); - заполненность email (
hasEmail).
function validateStep(isAuth, age, hasEmail) {
if (!isAuth) return 'auth-error';
if (age < 18) return 'age-error';
if (!hasEmail) return 'email-error';
return 'ok';
}
Здесь важны и строгие проверки, и правильный порядок условий.
Смотри, что важно: в этом примере предполагается, что age уже число, а hasEmail уже boolean (после нормализации ввода). В реальном приложении это почти всегда отдельный шаг перед валидацией.
Частые ошибки новичков
- Забывать
'use strict'в учебных/простых скриптах. - Писать
==там, где нужен строгий контроль типов. - Не нормализовать ввод (строки, пробелы,
null). - Смешивать много условий без явного приоритета.
Анти-провал: сначала приводи вход к ожидаемому типу, потом проверяй условия.
Что будет, если изменить входные данные
В validateStep:
isAuth = false-> всегдаauth-error;isAuth = true,age = 17->age-error;isAuth = true,age = 20,hasEmail = false->email-error;- все ок ->
ok.
Такой явный сценарий проще тестировать и поддерживать.
Проверь себя: почему порядок проверок здесь не стоит менять случайно?
Краткий итог
- Strict mode делает JavaScript более строгим и предсказуемым.
- Он помогает ловить опасные ошибки раньше (например, неявные глобальные переменные).
- Для сравнения значений в большинстве случаев лучше
===/!==. - Нормализация и проверка входа обязательны в прикладных сценариях.
- Комбинация strict mode + явные проверки заметно снижает число новичковых багов.