JavaScript-Rückgabe undefiniert
-
undefiniert
in JavaScript -
Szenarien, die als Ausgabe
undefined
zurückgeben -
Unterschied zwischen
undefiniert
undnull
- Abschluss
JavaScript hat weniger Bibliotheken oder Frameworks als andere Programmiersprachen. null
und undefined
repräsentieren leere Werte in JavaScript.
Um die Fehler zu reduzieren, die zusammen mit undefined
auftreten, ist es ein Muss, den Grund für die Rückgabe von undefined
genau zu verstehen. Verschaffen wir uns einen kurzen Überblick über undefined
in JavaScript.
undefiniert
in JavaScript
Unter den sechs primitiven JavaScript-Typen ist undefined
ein besonderer Primitivtyp mit dem Wert undefined
. Der einzige Wert, den der undefinierte Typ hat, ist einfach undefiniert.
undefined
ist eine Variable mit globalem Geltungsbereich, die eine nicht beschreibbare und nicht konfigurierbare Eigenschaft ist. Gemäß den ECMA-Spezifikationen wird der Wert undefined zurückgegeben, wenn einer Variablen kein Wert zugewiesen wurde.
// uninitialized variable
let letters;
console.log(letters);
// non-existing array elements
let vowels = ['a', 'e'];
console.log(vowels[3]);
// non-existing object properties
let flower = {name: 'Rose'};
console.log(flower.color);
Ausgang:
undefined
undefined
undefined
Wie es in der Ausgabe aussieht, wird beim Zugriff auf eine nicht initialisierte Variable, nicht existierende Array-Elemente oder Objekteigenschaften der Wert undefined
zurückgegeben. Nachdem wir jeden Codeabschnitt separat ausgeführt haben, können wir drei undefinierte
Ausgaben erhalten.
Sehen wir uns die Situationen an, in denen JavaScript undefiniert
zurückgibt, und einige Best Practices, um die Rückgabe von undefiniert
zu lösen.
Szenarien, die als Ausgabe undefined
zurückgeben
Zugriff auf eine nicht initialisierte Variable
Wenn wir eine Variable deklarieren, ohne einen Wert zu initialisieren, gibt die Variable undefiniert zurück.
Code:
let letters;
console.log(letters);
Ausgang:
undefined
Wie im Code-Chunk wird keiner der Werte der deklarierten Variable letters
zugewiesen. Wie Sie in der Ausgabe oben sehen, gibt es beim Aufruf der Variablen undefined
zurück, aber wenn wir der Variablen einen Wert zuweisen, gibt es den Wert unten zurück.
Code:
let letters = 5;
console.log(letters);
Ausgang:
5
Zugriff auf eine nicht vorhandene Eigenschaft
Beim Zugriff auf eine nicht vorhandene Eigenschaft wird undefined
zurückgegeben, anstatt einen Fehler zu werfen. Das folgende Beispiel beweist das gut.
Code:
let flower = {name: 'Rose'};
console.log(flower.color);
Ausgang:
undefined
Hier hat die Objekteigenschaft Blume
eine Eigenschaft als name
. Aber beim Zugriff haben wir die Eigenschaft Farbe
aufgerufen, die eine nicht vorhandene Eigenschaft dieses Objekts ist.
Wie in der Ausgabe zu sehen ist, liefert sie als Ausgabe den Wert undefined
zurück.
Als Best Practice können wir die Verfügbarkeit der Eigenschaft mit der folgenden Syntax überprüfen, bevor wir darauf zugreifen. Dann können wir die Rückgabe von undefined
als Ausgabe loswerden.
Syntax:
'propertyName' in objectName
Code:
let flower = {name: 'Rose'};
if ('color' in flower) {
console.log(flower.color);
}
Funktionsparameter aufrufen
Wenn wir eine Funktion mit weniger Argumenten anstelle der definierten Anzahl von Argumenten aufrufen, gibt sie undefiniert
zurück, da sie nicht alle Argumente übergibt. Daher müssen wir die Funktion mit der gleichen Anzahl von Argumenten aufrufen.
Code:
function multiply(a, b, c) {
a;
b;
c;
return a * b;
}
console.log(multiply(5, 3));
Ausgang:
15
Es hat Werte für a
und b
, 5
und 3
zugewiesen, wenn die Funktion mit zwei Argumenten aufgerufen wird, sodass 15
als Ausgabe zurückgegeben wird, nachdem diese Werte zugewiesen wurden.
Der folgende Code ruft dieselbe Funktion mit denselben zwei Werten auf, nachdem der Ausdruck der return-Anweisung geändert wurde, um insgesamt a
, b
und c
zu multiplizieren.
Code:
function multiply(a, b, c) {
a;
b;
c;
return a * b * c;
}
console.log(multiply(5, 3));
Ausgang:
NaN
Wie in der Ausgabe gezeigt, gibt es NaN
anstelle von Berechnungswerten zurück. Der Grund dafür ist, dass nicht alle Argumente übergeben werden und der Wert für c
undefiniert
bleibt.
die return
-Anweisung einer Funktion
Ein weiterer Fall, in dem die Ausgabe als undefiniert
zurückgegeben wird, ist, wenn eine Funktion keine return
-Anweisung oder eine return
-Anweisung ohne einen Ausdruck in der Nähe hat.
Lassen Sie uns zum Beispiel eine Funktion namens sq_num
deklarieren, die eine Quadratzahl entsprechend der gegebenen Eingabe generiert.
Code:
// doesn't have a return statement
function sq_num(x) {
const result = x * x;
}
console.log(sq_num(2));
// return statement without an expression
function sq_num(x) {
const result = x * x;
return;
}
console.log(sq_num(2));
Ausgang:
undefined
undefined
Wir müssen die return
-Anweisung und einen Ausdruck deklarieren, der im folgenden Code erwähnt wird, um diese Funktion sq_num
wie erwartet auszuführen. Dadurch können wir das Rechenergebnis der Funktion wie unten erhalten.
Code:
function sq_num(x) {
const result = x * x;
return result;
}
console.log(sq_num(2));
Ausgang:
4
Zugriff auf Out-Of-Bound-Elemente in Arrays
Wenn wir auf Elemente zugreifen, die nicht innerhalb des Arrays definiert sind, kann dies als Zugriff auf außerhalb der Grenzen liegende Elemente betrachtet werden. Tritt eine solche Situation ein, wird der Wert undefiniert
zurückgegeben.
Code:
const animals = ['elephant', 'tiger', 'monkey'];
console.log(animals[5]);
console.log(animals[-1]);
Ausgang:
undefined
undefined
Auf die gleiche Weise stellen Sparse-Arrays das gleiche Problem dar. Sparse-Arrays sind Arrays mit Lücken und nicht indizierten Elementen.
Beim Zugriff auf die leeren Slots des Arrays liefert es ebenfalls den Wert undefined zurück.
Code:
const SparseArray = ['elephant', , 'monkey'];
console.log(SparseArray);
Ausgang:
["elephant", undefined, "monkey"]
Hier wird das Array SparseArray
mit drei Elementen erstellt, wobei das zweite fehlt. Wie unten zu sehen ist, gibt es undefiniert zurück, wenn auf das zweite Element zugegriffen wird.
Code:
const SparseArray = ['elephant', , 'monkey'];
console.log(SparseArray[1]);
Ausgang:
undefined
Abgesehen von den oben genannten Szenarien wird der Wert undefined zusammen mit dem void-Operator zurückgegeben. Nachfolgend finden Sie Beispiele dafür, wie es trotz des Bewertungsergebnisses undefiniert zurückgibt.
Code:
void 2;
console.log(void (true));
Ausgang:
undefined
Unterschied zwischen undefiniert
und null
JavaScript hat sowohl null
- als auch undefined
-Werte, die leere Werte darstellen.
Wenn eine Variable keinen explizit zugewiesenen Wert hat, weist JavaScript ihr den primitiven Wert undefiniert zu. Wie der Name schon sagt, ist null ein primitiver Wert, der das absichtliche Fehlen eines anderen zugewiesenen Werts darstellt.
Unter Verwendung des Operators typeof
können wir wie unten eine Unterscheidung zwischen null und undefiniert sehen.
typeof undefined;
typeof null;
undefined
object
Insgesamt zeigt null fehlende Objekte an, während undefiniert der Wert ist, der in einer nicht initialisierten Variablen verwendet wird.
Abschluss
Dieser Artikel beschreibt das Vorkommen von undefined zusammen mit den nicht initialisierten Variablen, nicht vorhandenen Eigenschaften, Out-of-Bound-Indizes und dem Void-Operator.
Zusammen mit dem Besprochenen können einige der Best Practices angewendet werden, wenn Sie zusammen mit den Beispielen verwendet werden. Abgesehen davon haben wir uns den Unterschied zwischen null und den definierten Werten und deren Verwendungsinstanzen angesehen.
Als bewährte Methode sollten wir dafür verantwortlich sein, das Auftreten von undefined zu reduzieren, indem wir die Verwendung von nicht initialisierten Variablen und Arrays mit geringer Dichte reduzieren.
Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.