Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Erklärung des Unterschieds zwischen undefiniert und null in JavaScript

Detaillierte Erklärung des Unterschieds zwischen undefiniert und null in JavaScript

黄舟
黄舟Original
2017-12-04 16:15:451988Durchsuche

Wenn wir den Titel sehen, wissen wir alle, dass die beiden bedeuten, was sie bedeuten. Wir wissen auch, dass es in den meisten Computersprachen nur einen Wert gibt, der „keine“ darstellt, zum Beispiel NULL in C-Sprache , null in der Java-Sprache, None in der Python-Sprache und nil in der Ruby-Sprache. Etwas seltsam ist, dass die JavaScript-Sprache tatsächlich zwei Werte hat, die „none“ darstellen: undefiniert und null. Warum ist das so? Heute stellen wir Ihnen die Unterschiede zwischen den beiden vor!

1. Ähnlichkeit

Um ehrlich zu sein, gibt es in JavaScript 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

Es stellt sich heraus, dass dies mit der Geschichte zusammenhängt von JavaScript. Als JavaScript im Jahr 1995 geboren wurde, wurde zunächst wie Java nur Null als Wert für „Nichts“ 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. Der -Datentyp von JavaScript ist jedoch in zwei Kategorien unterteilt: primitiver Typ (primitiv) und synthetischer Typ (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 Es handelt sich um ein Objekt, das „none“ darstellt und bei der Konvertierung in einen numerischen Wert 0 ist; undefiniert ist ein primitiver Wert, der „none“ darstellt und bei der Konvertierung in einen numerischen Wert NaN ist.

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

4. Aktuelle Nutzung

Allerdings , erwies sich die obige Unterscheidung in der Praxis schnell als undurchfü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 der 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

Zusammenfassung:

Dieser Artikel stellt den Unterschied zwischen undefiniert und null in JavaScript aus mehreren Methoden vor. Ich glaube, dass Freunde es verstehen werden Jeder hat sein eigenes Verständnis und Verständnis, ich hoffe, es wird für Ihre Arbeit hilfreich sein!

Verwandte Empfehlungen:

Was ist die ursprüngliche Designabsicht von null und undefiniert in js

Lösung für den undefinierten PHP-Prompt-Index

Erkundung der Abgründe von Null und Undefiniert in JavaScript

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des Unterschieds zwischen undefiniert und null in JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn