Будучи младшим веб-разработчиком, вы, возможно, сталкивались с терминами «null», «undefined» и «не определено» в своем путешествии по JavaScript. Эти концепции могут немного сбивать с толку, особенно когда вы только начинаете. Но не бойтесь! Мы вместе увидим различия между этими терминами, как они работают с примерами кода, и объясним некоторые потенциальные побочные эффекты, которые могут возникнуть, если вы не обратите внимание на их различия.
Нулевой
В JavaScript null
— это специальное примитивное значение, которое представляет преднамеренное отсутствие какого-либо значения объекта. Он присваивается переменной, чтобы указать, что она не должна иметь значения.
const exampleVar = null; console.log(exampleVar) // Output: null
Неопределенный
undefined
— это еще одно специальное примитивное значение в JavaScript, представляющее переменную, которая была объявлена, но ей не присвоено значение.
let exampleVar; console.log(exampleVar); // Output: undefined
Не определен
Фраза «не определено» не является значением в JavaScript, таким как null
или undefined
, а скорее сообщением об ошибке, с которым вы столкнетесь, когда попытаетесь сослаться на необъявленную переменную.
console.log(nonexistentVar); // Output: ReferenceError: nonexistentVar is not defined
Итак, довольно просто, верно?
Не стесняйтесь манипулировать этими примерами прямо в консоли вашего браузера, чтобы ознакомиться с этими понятиями.
Побочные эффекты
Теперь поговорим о том, что нас действительно интересует.
Если вы не обращаете внимания на различия между null
, undefined
и «не определено», вы можете столкнуться с некоторыми проблемными побочными эффектами:
Неожиданное поведение
Когда функция ожидает определенный тип или значение, передача null
или undefined
может привести к ошибкам, сбоям или другим непредвиденным последствиям.
Рассмотрим следующую функцию, которая ожидает объект со свойством name
:
function greet(person) { return `Hello, ${person.name}!`; }
Если вы передаете объект со свойством name
, функция работает так, как ожидалось:
const john = { name: 'John' }; console.log(greet(john)); // Output: Hello, John!
Однако, если вы передадите null
или undefined
, функция выдаст ошибку:
console.log(greet(null)); // Output: TypeError: Cannot read property 'name' of null console.log(greet(undefined)); // Output: TypeError: Cannot read property 'name' of undefined
Чтобы избежать этого побочного эффекта, вы можете добавить условие для проверки, является ли параметр person
объектом:
function greet(person) { if (!person || typeof person !== 'object') { return 'Hello, stranger!'; } return `Hello, ${person.name}!`; }
Трудности отладки
Представьте, что у вас есть функция, которая вычисляет общую стоимость товаров в корзине, включая налог:
function calculateTotal(items, taxRate) { let total = 0; for (const item of items) { total += item.price * item.quantity; } total += total * taxRate; return total; }
Теперь предположим, что вы забыли объявить переменную taxRate
и использовали ее непосредственно в вызове функции:
const items = [ { price: 10, quantity: 2 }, { price: 15, quantity: 1 }, ]; console.log(calculateTotal(items, taxRate)); // Output: ReferenceError: taxRate is not defined
В этом случае сообщение об ошибке «ReferenceError: taxRate не определено» указывает на то, что переменная taxRate
не была объявлена. Если вы неправильно поняли ошибку и подумали, что это означает, что taxRate
просто не назначено (undefined
), вы можете потратить время на поиски того, где должно было быть присвоено значение.
Чтобы исправить ошибку, нужно объявить и присвоить значение переменной taxRate
:
const taxRate = 0.1; console.log(calculateTotal(items, taxRate)); // Output: 38.5
Эти примеры подчеркивают важность понимания различий между null
, undefined
и «не определено» при написании и отладке кода JavaScript.
Зная об этих нюансах, вы можете избежать неожиданного поведения и повысить эффективность отладки. Вы сэкономите время и нервы, напишите более чистый код и создадите более надежные приложения.
Помните об этих концепциях, когда пишете код, и вы будете на пути к освоению JavaScript.
- Веб-документы MDN — null: этот ресурс содержит подробное объяснение значения
null
в JavaScript, а также несколько примеров: https://developer.mozilla.org/en-US /docs/Web/JavaScript/Reference/Global_Objects/null - Веб-документы MDN — undefined: Как и по предыдущей ссылке, на этой странице представлено подробное описание значения
undefined
, а также примеры, которые помогут закрепить ваше понимание: https://developer. mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined - Переполнение стека. В чем разница между null и undefined в JavaScript? В этой ветке переполнения стека подробно обсуждаются различия между
null
иundefined
: https://stackoverflow.com/ вопросы/5076944/какая-есть-разница-между-нулевым-и-неопределенным-в-javascript - Веб-документы MDN — ReferenceError: на этой странице подробно рассматривается сообщение об ошибке не определено (ReferenceError) и предоставляется информация о ее причинах и способах ее устранения: https://developer. mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError
- ✌️Если вы планируете подписаться на Medium, пожалуйста, не стесняйтесь использовать эту ссылку. Вам ничего не будет стоить, а мне очень поможет
- 👏 Хлопайте в ладоши, чтобы эта статья попала в топ
- 🔔Подпишитесь на меня в Медиуме