2.1 Переменные — это ссылки
В JavaScript переменные представляют собой ссылки на объекты, а не саму переменную. Это означает, что, когда вы создаете переменную в JavaScript, вы просто создаете ссылку на объект в памяти.
Эта особенность языка имеет важные последствия для работы с переменными, особенно при передаче объектов в функции или их присваивании другим переменным.
Когда вы создаете переменную и присваиваете ей значение, JavaScript выделяет объект в памяти для этого значения и делает переменную ссылкой на этот объект. Если вы присвоите одну переменную другой, новая переменная будет ссылаться на тот же объект, что и исходная переменная. Это означает, что изменения, сделанные через одну переменную, отразятся и на другой, если объект изменяемый.
Пример:
let a = [1, 2, 3];
let b = a;
b.push(4);
console.log(a); // Выведет: [1, 2, 3, 4]
Мы добавляли число 4 в переменную b, но он добавился и в список в переменной а, т. к. на самом деле обе переменные — это всего лишь ссылки на объект список [1, 2, 3]
2.2 Тип undefined
В JavaScript существуют два специальных типа данных: null и undefined. Эти типы часто вызывают вопросы у разработчиков из-за их схожести, но у них разные назначения, и они используются в различных ситуациях. Рассмотрим их подробнее.
Тип undefined
Тип undefined представляет значение переменной, которая была объявлена, но не инициализирована. Это значение также возвращается при доступе к несуществующему свойству объекта или элементу массива, который не существует.
Примеры
1. Неинициализированная переменная:
let x;
console.log(x); // undefined
2. Несуществующее свойство объекта:
let obj = {};
console.log(obj.property); // undefined
3. Несуществующий элемент массива:
let array = [1, 2, 3];
console.log(array[5]); // undefined
4. Отсутствующий аргумент функции:
function myFunction(a, b) {
console.log(b); // undefined, если вызвано как myFunction(1)
}
myFunction(1);
Свойства undefined:
undefinedявляется типом данных и значениемtypeof undefinedвозвращаетundefined
2.3 Тип null
Тип null представляет намеренное отсутствие значения. Это значение часто используется для инициализации переменных, которые будут позже присвоены объектом, или для очистки значения переменной.
Примеры
1. Инициализация переменной:
let obj = null;
console.log(obj); // null
2. Очистка значения переменной:
let user = { name: "Alice" };
user = null; // user теперь не указывает на объект
Свойства null:
nullявляется значением, представляющим намеренное отсутствие значенияtypeof nullвозвращаетobject, что является признанной ошибкой в языке JavaScript (на самом делеnullне является объектом)
2.4 Сравнение null и undefined
Несмотря на то, что null и undefined могут использоваться для обозначения отсутствия значения, они различаются по назначению и контексту использования.
| Свойство | null | undefined |
|---|---|---|
| Тип | Примитивный тип | Примитивный тип |
| Назначение | Намеренное отсутствие значения | Неинициализированная переменная |
| Использование | Инициализация переменных, очистка значения | Несуществующие свойства, элементы массива |
| Значение по умолчанию | Нет | Да (для неинициализированных переменных, параметров функций) |
Примеры использования
1. Инициализация переменной объектом или массивом:
let myObject = null;
let myArray = null;
2. Проверка значений:
let value;
if (value === undefined) {
console.log("Переменная не инициализирована.");
}
let result = null;
if (result === null) {
console.log("Отсутствие значения.");
}
3. Очистка значений:
let person = { name: "Alice" };
person = null; // Теперь person не указывает на объект
4. Проверка на существование свойства:
let obj = {};
if (obj.property === undefined) {
console.log("Свойство не существует.");
}
Понимание различий между null и undefined в JavaScript важно для правильного управления значениями и предотвращения ошибок в коде.
undefined обычно указывает на неинициализированные переменные или отсутствующие свойства, в то время как null используется для явного указания на отсутствие значения.
Правильное использование этих специальных типов данных делает код более понятным и предсказуемым.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ