#заметка дня
Как мы все знаем, в JavaScript есть две формы «пустоты»: undefined
и null
.
Но почти весь современный фронтенд давно выбрал сторону.null
— это ошибка на миллиард долларов, о которой пожалел даже его создатель, Тони Хоар. Он добавляет путаницу, ломает API и заставляет писать лишние проверки.
Почему null
— плохая идея:
Разные API возвращают то null, то undefined, то оба.
Это неясно, это ошибки.
✅ TypeScript-гайд от Microsoft прямо говорит: используйте undefined, избегайте null
.
✅ В TSLint null запрещён по умолчанию (`no-null-keyword`).
✅ Правила ESLint Unicorn (да, название неслучайное) — тоже пропагандируют борьбу с null
в пользу чистого, предсказуемого кода.
✅ В крупных экосистемах, например, как у Prisma, null
создаёт баги и недопонимание в API (issue #572)
✅ undefined
— поведение по умолчанию в JS для необъявленных свойств и пустых объектов.
✅ undefined
выигрывает даже в JSON. Когда ты сериализуешь данные:null
остаётся в объекте:
{ "a": null }
а
undefined
просто исчезает:
{ "a": undefined } → { }
В реальных системах это даёт выигрыш в размере и читаемости. Пример из продакшена: объект с миллионом
null
весил 13.9 MB, а с undefined
— всего 21 байт. И если ты работаешь с Node.js и хорошо контролируешь свои API — undefined
тебе только на руку.❌ Да, из-за того, что множество систем до сих пор оперирует
null
, и даже DOM API возвратит null
при отсутствии элемента (ноды), выбор становится не настолько простым. К счастью, мы можем использовать optional chaining (?.
) и nullish coalescing (??
) чтобы снизить вероятность конфуза.Кстати, даже столь любимый мной Effector ещё не так давно пропагандировал
null
для пустых сторов, но с недавнего времени разрешил undefined
(в своей манере, там сложная концепция).Итак,
null
— это рудимент. Он создаёт больше проблем, чем решает. undefined
уже делает всё, что нужно — чище, предсказуемей и легче.Пора выбрать сторону 🦄
P. S. человек, который заставил меня принять сторону сейчас, наверное, сидит и хихикает. Но в целом, единственное, что у меня есть в защиту
null
— это наш бакенд на PHP и MySQL 🤷 #js #ts #eslint #null
>>Click here to continue<<
