Heim > Web-Frontend > js-Tutorial > Hauptteil

Der Unterschied zwischen undefiniert und null in javascript_javascript-Fähigkeiten

WBOY
Freigeben: 2016-05-16 15:44:47
Original
1092 Leute haben es durchsucht

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 „none“ darstellen: undefiniert und null. Warum ist das so?

1. Ähnlichkeit

Um ehrlich zu sein, macht es in JavaScript fast keinen Unterschied, eine Variable undefiniert oder null zuzuweisen.

var a = undefined;

var a = null;

Nach dem Login kopieren

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

Nach dem Login kopieren

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

Da die Bedeutung und Verwendung von undefiniert und null ähnlich sind, warum müssen Sie dann zwei solcher Werte gleichzeitig festlegen? 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

Als ich kürzlich das neue Buch „Speaking JavaScript“ las, entdeckte ich zufällig die Antwort auf diese Frage!
Es stellt sich heraus, dass dies mit der Geschichte von JavaScript zu tun hat. 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

Nach dem Login kopieren

JavaScript-Designer Brendan Eich 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 eine Datentypinkongruenz 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. Erster Entwurf

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

Number(undefined)
// NaN

5 + undefined
// NaN

Nach dem Login kopieren

4. Aktuelle Nutzung

Die obige Unterscheidung erwies sich in der Praxis jedoch schnell als nicht umsetzbar. 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) Als Endpunkt der Objektprototypkette.

Object.getPrototypeOf(Object.prototype)
// null

Nach dem Login kopieren

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 Aufrufen der Funktion wird der bereitzustellende Parameter nicht angegeben und der Parameter ist gleich undefiniert.
(3) Dem Objekt sind keine Attribute 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

Nach dem Login kopieren

Das Folgende ist eine kleine Zusammenfassung

null ist ein JavaScript-Schlüsselwort, das ein Nicht-Objekt darstellt.

undefiniert bedeutet, dass kein Wert vorhanden ist, was darauf hinweist, dass der Wert nicht existiert oder nicht initialisiert wurde.

Gleichheit Unterschiede
Einzigartiger Wert des eigenen Typs null ist ein Objekt, undefiniert ist ein reserviertes Wort
Keine Eigenschaften und Methoden Null wird bei der Teilnahme an mathematischen Operationen in 0 konvertiert, und undefiniert kann bei mathematischen Operationen nicht in NaN konvertiert oder umgewandelt werden
== gilt als gleich, === gilt als ungleich null !==undefiniert //true
sind alle falsche Werte und die booleschen Variablen stellen denselben Wert dar

null ist ein leeres Objekt, undefiniert ist eine Eigenschaft von window (aber keine Objekteigenschaft)

  alert(typeof null) // object ; alarm(typeof undefiniert) // undefiniert ;
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage