- null
- Кратко
- Пример
- Как понять
- На практике
- Николай Лопин советует
- На собеседовании
- null
- Try it
- Syntax
- Description
- Examples
- Difference between null and undefined
- Specifications
- Browser compatibility
- See also
- Found a content problem with this page?
- Everything about null in JavaScript
- Table of Contents
- Like the post? Please share!
- About Dmitri Pavlutin
- About Dmitri Pavlutin
null
Примитивный тип данных. Состоит из единственного значения null и обозначает отсутствие значения.
Время чтения: меньше 5 мин
Кратко
Скопировать ссылку «Кратко» Скопировано
Null — это примитивный тип данных, который состоит из единственного значения null .
Значение null используют, когда нужно обозначить намеренное отсутствие значения.
Пример
Скопировать ссылку «Пример» Скопировано
const password = null
const password = null
В списке важных дел по дням недели пользователь решил, что в субботу и воскресенье главного дела нет:
const mainFocusByDays = mon: 'Исправить баг в вёрстке', tue: 'Разобрать почту', wed: 'Написать бота', thu: 'Изучить примитивные типы', fri: 'Отправить резюме в Яндекс', sat: null, sun: null>
const mainFocusByDays = mon: 'Исправить баг в вёрстке', tue: 'Разобрать почту', wed: 'Написать бота', thu: 'Изучить примитивные типы', fri: 'Отправить резюме в Яндекс', sat: null, sun: null >
Как понять
Скопировать ссылку «Как понять» Скопировано
null обозначает понятия «отсутствует», «ничего», «пусто» или «значение неизвестно». Оно всегда явно задаётся программистом, JavaScript автоматически не устанавливает его.
В JavaScript null используется только для обозначения конца цепочки прототипов, чтобы показать, что следующий прототип отсутствует.
В языке существует похожий примитив undefined , он обозначает, что значение ещё не установлено. Их можно легко спутать, потому что оба обозначают отсутствие значения. Разница состоит в том, что null обозначает намеренное отсутствие, а undefined — неявное.
Например, сам JavaScript использует undefined для обозначения не проинициализированных переменных:
let newValue console.log(newValue)// undefined // в явном виде говорим, что значение отсутствуетnewValue = null
let newValue console.log(newValue) // undefined // в явном виде говорим, что значение отсутствует newValue = null
На практике
Скопировать ссылку «На практике» Скопировано
Николай Лопин советует
Скопировать ссылку «Николай Лопин советует» Скопировано
🛠 Оператор typeof некорректно определяет тип у null и возвращает значение ‘object’ по историческим причинам.
console.log(typeof null)// 'object'
console.log(typeof null) // 'object'
🛠 Разделение между undefined и null очень слабое. Это рекомендация, которую не все выполняют. Команды могут договориться о своей трактовке этих значений.
Например, в приложении нужно отобразить список пользователей, полученный с сервера. Пока данных нет, мы рисуем заглушку. В этом случае мы можем трактовать значение undefined как «отправили запрос на сервер, рисуем заглушку и ждём ответа», а null как «сервер ответил, что у него нет данных».
🛠 Уточняйте договорённости по undefined и null на проекте. Часто они не зафиксированы на бумаге, но имеют большое значение.
На собеседовании
Скопировать ссылку «На собеседовании» Скопировано
В чём разница между null , undefined и объявленной переменной без начального значения? ( let foo; )
Скопировать ссылку «В чём разница между null, undefined и объявленной переменной без начального значения? (let foo;)» Скопировано
Скопировать ссылку «Александр Рассудихин отвечает» Скопировано
null обычно задаётся переменной явно и означает, что она ничего не содержит. undefined показывает, что значение переменной «не определено». undefined обычно присваивается переменной, когда она была объявлена, но не было определено её начальное значение. Также, undefined может возвращаться и из функции — это происходит, если функции явно не возвращает ничего другого. null же обычно возвращают из функции явно, чтобы показать, что результат функции равен «ничему».
Без начального значения можно оставлять только переменную объявленную через let или var . Если объявить переменную через const и не задать ей начального значения, будет ошибка: Uncaught SyntaxError : Missing initializer in const declaration .
Оператор typeof для null работает странно. typeof ( null ) выдаст нам строку ‘object’. Это официально признанная ошибка в языке, сохраняемая для совместимости. Ошибка тут в том, что null это отдельный тип данных, а не объект. С undefined всё куда лучше и typeof ( undefined ) выдаст нам ‘undefined’. Почитать ещё о typeof можно здесь.
Поговорим немного о приведении типов. Для начала, пример:
console.log(null + null); // 0console.log(undefined + undefined); // NaN
console.log(null + null); // 0 console.log(undefined + undefined); // NaN
null во время сложения приводится к нулю. Это логично, так как числовым значением «ничего» является как раз 0.
С undefined другое поведении, так как JavaScript пытается привести его к числу, но у него не получается и в результате мы получаем NaN .
Немного упомяну и про оператор нулевого слияния ( ? ? ). В выражении между двумя операндами, он будет возвращать первый операнд, если он не равен null или undefined . Можно сказать, что ? ? приравнивает смысл undefined и null к «ничего не содержит» и в этом случае, кладёт в переменную значение второго операнда.
null
The null value represents the intentional absence of any object value. It is one of JavaScript’s primitive values and is treated as falsy for boolean operations.
Try it
Syntax
Description
The value null is written with a literal: null . null is not an identifier for a property of the global object, like undefined can be. Instead, null expresses a lack of identification, indicating that a variable points to no object. In APIs, null is often retrieved in a place where an object can be expected but no object is relevant.
// foo does not exist. It is not defined and has never been initialized: foo; //ReferenceError: foo is not defined
// foo is known to exist now but it has no type or value: const foo = null; foo; //null
Examples
Difference between null and undefined
When checking for null or undefined , beware of the differences between equality (==) and identity (===) operators, as the former performs type-conversion.
typeof null; // "object" (not "null" for legacy reasons) typeof undefined; // "undefined" null === undefined; // false null == undefined; // true null === null; // true null == null; // true !null; // true Number.isNaN(1 + null); // false Number.isNaN(1 + undefined); // true
Specifications
Browser compatibility
BCD tables only load in the browser
See also
Found a content problem with this page?
This page was last modified on Feb 21, 2023 by MDN contributors.
Your blueprint for a better internet.
Everything about null in JavaScript
JavaScript has 2 kinds of types: primitives (strings, booleans, numbers, symbols) and objects.
Objects are complex data structures. The simplest object in JavaScript is the plain object — a collection of keys and associated values:
But there are situations when an object cannot be created. For such cases, JavaScript provides a special value null — which indicates a missing object.
In this post, you’ll learn everything about null in JavaScript: its meaning, how to detect it, the difference between null and undefined , and why using null extensively creates code maintenance difficulties.
Before I go on, let me recommend something to you.
The path to becoming good at JavaScript isn’t easy. but fortunately with a good teacher you can shortcut.
Take «Modern JavaScript From The Beginning 2.0» course by Brad Traversy to become proficient in JavaScript in just a few weeks. Use the coupon code DMITRI and get your 20% discount!
Table of Contents
The JavaScript specification says about null :
null is a primitive value that represents the intentional absence of any object value.
If you see null (either assigned to a variable or returned by a function), then at that place should have been an object, but for some reason, an object wasn’t created.
For example, the function greetObject() creates objects, but also can return null when an object cannot be created:
When invoking the function with a string argument like greetObject(‘Eric’) , as expected, the function returns an object < message: 'Hello, Eric!' >.
However, when invoking the function with no arguments — greetObject() — the function returns null . Returning null is reasonable because who parameter has no value, and the greeting object cannot be created.
1.1 Real-world analogy of null
Thinking about a real-world analogy, you can imagine a variable as being a box. Just like a variable can hold an object, the box can contain objects like a teapot.
But once you receive a box and open it. and nothing there! Someone made a mistake and sent you an empty box. The box contains nothing, or, saying it differently, contains a null value.
The good way to check for null is by using the strict equality operator:
missingObject === null evaluates to true because missingObject variable contains a null value.
If the variable contains a non-null value, like an object, the expression existingObject === null evaluates to false .
null , alongside false , 0 , » , undefined , NaN , is a falsy value. If a falsy value is encountered in conditionals, then JavaScript coerces falsy to false .
typeof value operator determines the type of value. For example typeof 15 is ‘number’ and typeof < prop: 'Value' >evaluates to ‘object’ .
Interestingly, to what value type null evaluates to?
Hm. how could the type of a missing object evaluate to ‘object’ ? Turns out typoef null being ‘object’ was a mistake in the early JavaScript implementation.
Do not use typeof operator to detect a null value. As mentioned previously, use the strict equality operator myVar === null .
If you’d like to check whether a variable contains an object using typeof operator, you have to check againts null too:
null might appear, often unexpectedly, in situations when you expect an object. Then if you try to extract a property from null , JavaScript throws an error.
Let’s use again greetObject() function and try to access message property from the returned object:
Because who variable is an empty string, the function returns null . When accessing message property from null , a TypeError error is thrown.
You can handle null by either using the optional chaining with nullish coalescing:
or use 2 alternatives described in the next section.
It’s tempting to return null when you cannot construct an object. But this practice has downsides.
As soon as null appears within your execution stack, you always have to check for it.
I try to avoid returning null in favor of:
- returning a default object instead of null
- throwing an error instead of returning null
Let’s recall the greetObject() function that returns greeting objects.
Instead of returning null when the argument is missing, you could either return a default object:
These practices let you avoid dealing with null at all.
undefined is the value of an uninitialized variable or object property.
For example, if you declare a variable without assigning an initial value, accessing such variable evaluates to undefined :
The main difference between null and undefined is that null represents a missing object, while undefined represents an uninitialized state.
The strict equality operator === distinguishes null from undefined :
While loose equality operator == considers null and undefined equal:
I use the loose equality operator to check whether a variable is null or undefined :
null is a special value in JavaScript that represents a missing object.
The strict equality operator determines whether a variable is null: variable === null .
typoef operator is useful to determine the type of a variable (number, string, boolean). However, typeof is misleading in case of null : typeof null evaluates to ‘object’ .
null and undefined are somehow equivalent, still, null represents a missing object, while undefined uninitialized state.
Avoid if possible returning null or setting variables to null . This practice leads to the spread of null values and verifications for null . Instead, try to use objects with default properties, or even throw errors.
Having mastered null , why not master undefined ? Follow my post 7 Tips to Handle undefined in JavaScript.
What condition do you use to check for null ?
Like the post? Please share!
About Dmitri Pavlutin
Software developer and sometimes writer. My daily routine consists of (but not limited to) drinking coffee, coding, writing, overcoming boredom 😉. Living in the sunny Barcelona. 🇪🇸
About Dmitri Pavlutin
Software developer and sometimes writer. My daily routine consists of (but not limited to) drinking coffee, coding, writing, overcoming boredom 😉. Living in the sunny Barcelona. 🇪🇸