В этом руководстве вы узнаете о undefined в JavaScript, обработке значений и о том, как эффективно с ним обращаться.
Если вы работали с другими языками программирования, такими как Java или C#, вы можете знать, что эти языки имеют null значение.
JavaScript также имеет null значение. Кроме того, он имеет undefined значение и представляют пустые значения в JavaScript.
undefined— это примитивный тип в JavaScript и имеет ровно одно значение.
1) Доступ к неинициализированной переменной
Когда вы объявляете переменную и не инициализируете ее значением, переменная будет иметь значение undefined. Например:
let counter; console.log(counter); // undefined
Хорошей практикой является всегда инициализировать переменную, когда это возможно. В этом примере вы можете инициализировать переменную counter нулем, например:
let counter = 0; console.log(counter); // 0
2) Доступ к несуществующему свойству объекта
Если вы получите доступ к несуществующему свойству объекта, вы получите undefined. Например:
let counter = {
current: 0
};
console.log(counter.max); // undefinedВ этом примере объект counter имеет одно свойство current. Доступ к свойству max, которого нет в объекте counter, возвращает undefined.
Хорошей практикой является проверка существования свойства перед доступом к нему. JavaScript предоставляет вам несколько способов сделать это.
И самый распространенный способ проверить, есть ли у объекта свойство, — использовать оператор in :
'propertyName' in objectName
Обратите внимание, что вам нужно заключить имя свойства объекта в одинарные или двойные кавычки.
В следующем примере оператор in используется для проверки наличия свойства max в объекте counter перед доступом к нему:
let counter = {
current: 0
};
if('max' in counter) {
console.log(counter.max);
}Если вы хотите присвоить значение по умолчанию, когда свойство объекта не существует, вы можете использовать нулевой оператор объединения( ?? ):
const propValue = object.propName ?? defaultValue;
В этом синтаксисе нулевой оператор объединения( ?? ) возвращает defaultValue, если object.propName не undefined или равно null.
Обратите внимание, что нулевой оператор объединения доступен начиная с ECMAScript 2020.
let counter = { current: 0 };
const max = counter.max ?? 100;3) Функциональные параметры
Когда вы вызываете функцию с несколькими параметрами, вы часто передаете одинаковое количество аргументов. Например:
const formatCurrency =(amount, currency) => {
return currency === '$' ?
`$${amount}`: `${amount} ${currency}`;
}
Функция formatCurrency() имеет два параметра. При вызове вы можете передать два аргумента следующим образом:
formatCurrency(100,'$'); // $100
Возвращаются $100, как и ожидалось.
Но когда вы вызываете formatCurrency() и не передаете все аргументы, параметры внутри функции становятся undefined. Например:
formatCurrency(100); // 100 undefined
Чтобы избежать этой ситуации, вы можете установить значение по умолчанию для параметров функции следующим образом:
const formatCurrency =(amount, currency = '$') => {
return currency === '$' ?
`$${amount}`: `${amount} ${currency}`;
}И при вызове без передачи второго аргумента вы получите правильное значение:
formatCurrency(100); // $100
4) Функции возвращают значение
Функция, не имеющая оператора return, неявно возвращает значение undefined. Например:
const log =(message) => {
const time =(new Date()).toLocaleTimeString();
console.log(`${time}: ${message}`);
};
const result = log('Hi');
console.log(result); // undefinedТочно так же, когда функция имеет оператор return без выражения, она также возвращает значение undefined. Например:
const add =(a,b) => {
const result = a + b;
return;
}
let result = add(10,20);
console.log(result); // undefinedРассмотрим следующий пример:
const add =(a,b) => {
return
a + b;
};
let result = add(10,20);
console.log(result); // undefinedФункция add() возвращает undefined. Вместо этого он должен был вернуть 30.
Проблема в том, что когда вы создаете новую строку между ключевым словом return и возвращаемым выражением( a + b ), компилятор Javascript автоматически вставляет точку с запятой(;) перед новой строкой. Эта функция называется автоматической вставкой точки с запятой(ASI) в JavaScript.
Функция add() будет выглядеть для компилятора JavaScript следующим образом:
const add =(a,b) => {
return;
a + b;
};Вот почему вы получаете undefined в качестве возвращаемого результата.
5) Доступ к элементам массива за пределами границ
При доступе к элементу массива, находящемуся за пределами границ, вы получите undefined значение. Например:
const colors = ['red', 'green', 'blue']; console.log(colors[3]); // undefined
В этом примере в массиве colors нет ни одного элемента с индексом 3. Следовательно, colors[3] возвращает значение undefined.
Заключение
undefinedв JavaScript — это примитивный тип, который имеет единственное значение.- Доступ к неинициализированной переменной возвращает
undefined. - Доступ к несуществующему свойству объекта возвращает данное свойство.
- При доступе к элементу массива, находящемуся за пределами границ, возвращается значение.
- Функция без оператора
returnили с операторомreturn, но без выражения возвращает значениеundefined.
