Heim  >  Artikel  >  Web-Frontend  >  Der Unterschied zwischen undefiniert und null in JavaScript (ausführliche Erklärung)

Der Unterschied zwischen undefiniert und null in JavaScript (ausführliche Erklärung)

青灯夜游
青灯夜游nach vorne
2019-11-23 16:11:323430Durchsuche

Die meisten Computersprachen haben einen und nur einen Wert, der „none“ darstellt, z. B. NULL in der C-Sprache, null in der Java-Sprache, None in der Python-Sprache und Null in der Ruby-Sprache. Etwas seltsam ist, dass die JavaScript-Sprache tatsächlich zwei Werte hat, die „nichts“ darstellen: undefiniert und null. Warum ist das so?

Der Unterschied zwischen undefiniert und null in JavaScript (ausführliche Erklärung)

1. Ähnlichkeit

Um ehrlich zu sein, weisen Sie in JavaScript eine Variable zu undefiniert oder null zu , es gibt fast keinen Unterschied.

var a = undefined;

var a = null;

Im obigen Code wird die Variable a undefiniert bzw. null zugewiesen. Die beiden Schreibmethoden sind nahezu gleichwertig.

Undefiniert und null werden in der if-Anweisung automatisch in „falsch“ konvertiert, und der Gleichheitsoperator meldet sogar direkt, dass sie gleich sind.

if (!undefined) 
    console.log('undefined is false');
// undefined is false
if (!null) 
    console.log('null is false');
// null is false
undefined == null
// true

Der obige Code zeigt, wie ähnlich die Verhaltensweisen der beiden sind!

Da die Bedeutungen und Verwendungen von undefiniert und null ähnlich sind, warum erhöht dies nicht ohne Grund die Komplexität von JavaScript und bereitet Anfängern Probleme? Die Dart-Sprache, ein Ersatz für die von Google entwickelte JavaScript-Sprache, schreibt eindeutig vor, dass es nur Null und kein Undefiniertes gibt!

2. Historische Gründe

Kürzlich habe ich dieses Problem zufällig entdeckt, als ich das neue Buch "Speaking JavaScript" Die Antwort!

Es stellte sich heraus, dass dies mit der Geschichte von JavaScript zusammenhängt. Als

JavaScript 1995 geboren wurde, wurde zunächst wie bei Java nur Null als Wert für „none“ festgelegt.

Gemäß der Tradition der C-Sprache ist null so konzipiert, dass es automatisch in 0 konvertiert wird.

Number(null)
// 0

5 + null
// 5

Brendan Eich, der Designer von JavaScript, ist jedoch der Meinung, dass dies aus zwei Gründen nicht ausreicht.

Zunächst einmal wird null wie in Java als Objekt behandelt. Allerdings werden JavaScript-Datentypen in zwei Kategorien unterteilt: primitive Typen (primitiv) und zusammengesetzte Typen (komplex). Brendan Eich ist der Meinung, dass der Wert, der „none“ darstellt, am besten kein Objekt ist.

Zweitens enthielt die ursprüngliche Version von JavaScript keinen Fehlerbehandlungsmechanismus. Wenn ein Datentypkonflikt auftritt, wird der Typ häufig automatisch konvertiert oder schlägt stillschweigend fehl. Brendan Eich ist der Meinung, dass es schwierig sein wird, Fehler zu finden, wenn Null automatisch in 0 konvertiert wird.

Deshalb hat Brendan Eich ein weiteres Undefiniertes entworfen.

3. Ursprüngliches Design

Die ursprüngliche Version von JavaScript unterscheidet sich wie folgt: null ist ein Objekt, das „none“ darstellt und konvertiert wird zu einem numerischen Wert ist 0; undefiniert ist ein primitiver Wert, der „keine“ darstellt, und ist NaN, wenn er in einen numerischen Wert umgewandelt wird.

Number(undefined)
// NaN
5 + undefined
// NaN

4. Heutige Verwendung

In der Praxis erwies sich die obige Unterscheidung jedoch bald als nicht durchführbar. Derzeit sind null und undefiniert grundsätzlich synonym, mit nur einigen subtilen Unterschieden.

null bedeutet „kein Objekt“, das heißt, dort sollte kein Wert vorhanden sein. Typische Verwendung ist:

(1) Als Parameter einer Funktion bedeutet dies, dass der Parameter der Funktion kein Objekt ist.

(2) dient als Endpunkt der Objektprototypkette.

Object.getPrototypeOf(Object.prototype)
// null

undefiniert bedeutet „fehlender Wert“, das heißt, hier sollte ein Wert vorhanden sein, dieser wurde jedoch noch nicht definiert. Typische Verwendung ist:

(1) Wenn eine Variable deklariert, aber kein Wert zugewiesen wird, ist sie gleich undefiniert.

(2) Beim Aufruf der Funktion wird der Parameter, der bereitgestellt werden soll, nicht bereitgestellt und der Parameter ist gleich undefiniert.

(3) Dem Objekt ist kein Attribut zugewiesen und der Wert dieses Attributs ist undefiniert.

(4) Wenn die Funktion keinen Wert zurückgibt, gibt sie standardmäßig undefiniert zurück.

var i;
i // undefined
function f(x){console.log(x)}
f() // undefined
var  o = new Object();
o.p // undefined
var x = f();
x // undefined

(Ende)

Empfohlenes Lernen:

JavaScript-Tutorial

Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen undefiniert und null in JavaScript (ausführliche Erklärung). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:ruanyifeng. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen