Ich habe immer gedacht: nullIst es leer, ist undefinedes leer, weil es nicht gesetzt wurde. Oder nullist absichtlich leer, solange undefinedes noch leer ist. Grundsätzlich zeigt es Absicht.
NaN. Überzeugen Sie sich selbst. console.log (null-undefined). Der Unterschied zwischen null und undefiniert ist NaN. (Beachten Sie, dass dies ein Versuch des Humors ist, bevor Sie mich wegen Missverständnisses der Frage
Ivan
Antworten:
1040
In JavaScript undefinedbedeutet dies , dass eine Variable deklariert wurde, aber noch kein Wert zugewiesen wurde, z.
Aus den vorstehenden Beispielen ist es klar , dass undefinedund nullzwei verschiedene Typen: undefinedein Typ selbst (nicht definiert) , während nullein Objekt ist.
Zitat aus dem Buch Professional JS für Webentwickler (Wrox): "Sie fragen sich vielleicht, warum der Operator typeof 'object' für einen Wert zurückgibt, der null ist. Dies war tatsächlich ein Fehler in der ursprünglichen JavaScript-Implementierung, die dann in ECMAScript kopiert wurde. Heute Es wird begründet, dass null als Platzhalter für ein Objekt betrachtet wird, obwohl es technisch gesehen ein primitiver Wert ist. "
Captain Sensible
34
Die Variable kann genauso gut überhaupt nicht definiert werden. Zum Beispiel: console.log (typeof (abc)); undefiniert
Nir O.
19
Der Kommentar von Nir O. ist sehr wichtig. Wenn ich eine Variable haben möchte, die am Anfang keinen Wert hat, schreibe ich "... = null", z. B. "myvar = null". Auf diese Weise wird der if-Block nicht ausgeführt, wenn ich "if (myxar == null) {...}" falsch eingebe. Ich habe diesen Vorteil bei undefined nicht: myvar = undefined; myvar = 4; if (typeof myxar == "undefined") {...}
Wolfgang Adamec
11
@Wolfgang Adamec, bei der fehlerfreien Programmierung geht es nicht um Fehlertypen.
Jorge Fuentes González
12
Im Grunde bedeutet Nullwert, dass eine Variable explizit als (kein Wert = null) festgelegt oder initialisiert und als nichts definiert wurde. Während undefiniert bedeutet. es wurde wahrscheinlich nie initialisiert oder wenn es war, wurde es nie definiert.
Der undefinierte Wert ist ein primitiver Wert, der verwendet wird, wenn einer Variablen kein Wert zugewiesen wurde.
Der Nullwert ist ein primitiver Wert, der die Null-, leere oder nicht vorhandene Referenz darstellt.
Wenn Sie eine Variable über var deklarieren und ihr keinen Wert geben, ist der Wert undefiniert. Wenn Sie versuchen, diesen Wert für WScript.Echo () oder alert () zu verwenden, wird an sich nichts angezeigt. Wenn Sie jedoch eine leere Zeichenfolge anhängen, wird plötzlich Folgendes angezeigt:
var s;WScript.Echo(s);WScript.Echo(""+ s);
Sie können eine Variable deklarieren, auf null setzen und das Verhalten ist identisch, außer dass "null" im Vergleich zu "undefiniert" ausgedruckt wird. Dies ist in der Tat ein kleiner Unterschied.
Sie können sogar eine undefinierte Variable mit null vergleichen oder umgekehrt, und die Bedingung ist wahr:
undefined==nullnull==undefined
Es werden jedoch zwei verschiedene Typen betrachtet. Während undefined ein eigenständiger Typ ist, wird null als spezieller Objektwert betrachtet. Sie können dies sehen, indem Sie typeof () verwenden, das eine Zeichenfolge zurückgibt, die den allgemeinen Typ einer Variablen darstellt:
var a;WScript.Echo(typeof(a));var b =null;WScript.Echo(typeof(b));
Das Ausführen des obigen Skripts führt zu der folgenden Ausgabe:
undefined
object
Unabhängig davon, ob es sich um unterschiedliche Typen handelt, verhalten sie sich immer noch gleich, wenn Sie versuchen, auf ein Mitglied eines der beiden zuzugreifen, z. B., dass sie eine Ausnahme auslösen. Mit WSH werden Sie sehen, dass der gefürchtete "'varname' ist null oder kein Objekt" und das ist, wenn Sie Glück haben (aber das ist ein Thema für einen anderen Artikel).
Sie können eine Variable explizit als undefiniert festlegen, aber ich rate dringend davon ab. Ich empfehle, nur Variablen auf null zu setzen und den Wert für Dinge, die Sie vergessen haben, undefiniert zu lassen. Gleichzeitig ermutige ich Sie wirklich, immer jede Variable festzulegen. JavaScript hat eine andere Bereichskette als die Sprachen im C-Stil, die selbst erfahrene Programmierer leicht verwirrt. Das Setzen von Variablen auf Null ist der beste Weg, um darauf basierende Fehler zu vermeiden.
Eine andere Instanz, in der ein undefiniertes Popup angezeigt wird, ist die Verwendung des Löschoperators. Diejenigen von uns aus einer C-Welt könnten dies fälschlicherweise als Zerstörung eines Objekts interpretieren, aber es ist nicht so. Mit dieser Operation wird ein Index aus einem Array oder ein Mitglied aus einem Objekt entfernt. Bei Arrays wirkt sich dies nicht auf die Länge aus, sondern darauf, dass der Index jetzt als undefiniert betrachtet wird.
var a =['a','b','c'];delete a[1];for(var i =0; i < a.length; i++)WScript.Echo((i+".) "+a[i]);
Das Ergebnis des obigen Skripts ist:
0.) a
1.)undefined2.) c
Sie erhalten auch eine undefinierte Rückgabe, wenn Sie einen Index oder ein Mitglied lesen, das noch nie existiert hat.
Der Unterschied zwischen null und undefiniert ist: JavaScript setzt niemals etwas auf null, das ist normalerweise das, was wir tun. Während wir Variablen auf undefiniert setzen können, bevorzugen wir null, da dies nie für uns getan wird. Wenn Sie debuggen, bedeutet dies, dass alles, was auf null gesetzt ist, von Ihnen selbst und nicht von JavaScript ausgeführt wird. Darüber hinaus sind diese beiden Sonderwerte nahezu gleichwertig.
Wirklich eine gute Antwort. Aber nur um darauf hinzuweisen, als Sie "undefined == null" aktiviert haben, war die Typprüfung nicht streng. Daher gab es "wahr" zurück. Wenn Sie "undefined === null" aktivieren, wird false zurückgegeben.
WOlVeRiNe
3
Es ist erwähnenswert, dass, obwohl dieser Kommentar im Jahr '11 zutraf, mit dem Aufkommen optionaler Funktionsparameter, dem Aufkommen von Typprüfungssystemen wie Flow und der Verbreitung von React (die alle undefiniert und null sehr unterschiedlich behandeln) die alte Weisheit von Im Allgemeinen gilt die Verwendung von null anstelle von undefiniert nicht mehr so streng. undefined ist in vielen Fällen, in denen Sie den Standardwert explizit verwenden möchten, der Null vorzuziehen (z. B. für einen optionalen Parameter oder eine optionale React-Requisite).
0x24a537r9
66
(Hinzufügen von Zeichen aufgrund fehlender Zeichen, daher darf ich dies posten.)
Könnten Sie bitte die Zuordnung für die Bildquelle angeben?
Vega
1
@Vega Leider nein, ich erinnere mich nicht, woher ich es habe, außer irgendwo auf imgur.com und das ist wahrscheinlich von einem Repost, nicht von der ORIGINAL-Quelle. Nicht einmal der eingebettete Link hier gibt einen Hinweis darauf, wer diese Version gepostet hat, daher kann ich auch nicht wirklich danach suchen.
Sebastian Norr
1
ha ha ha ... das ist die beste Erklärung, die ich je gesehen habe! cool!
Akbar Mirsiddikov
36
null ist ein spezielles Schlüsselwort, das auf das Fehlen eines Werts hinweist.
Betrachten Sie es als einen Wert, wie:
"foo" ist string,
wahr ist boolesch,
1234 ist Nummer,
null ist undefiniert.
Eine undefinierte Eigenschaft gibt an, dass einer Variablen kein Wert einschließlich Null zugewiesen wurde. Mögen
var foo;
Die definierte leere Variable ist nullvom Datentypundefined
Beide repräsentieren einen Wert einer Variablen ohne Wert
ANDnull stellt keine Zeichenfolge dar , die keinen Wert hat - leere Zeichenfolge-
Mögen
var a ='';
console.log(typeof a);// string
console.log(a ==null);//false
console.log(a ==undefined);// false
Nun wenn
var a;
console.log(a ==null);//true
console.log(a ==undefined);//true
ABER
var a;
console.log(a ===null);//false
console.log(a ===undefined);// true
SO hat jeder seine eigene Art zu benutzen
undefined Verwenden Sie diese Option, um den variablen Datentyp zu vergleichen
null Verwenden Sie diese Option, um einen Wert einer Variablen zu leeren
var a ='javascript';
a =null;// will change the type of variable "a" from string to object
null ist auch ein Datentyp. Sowohl undefiniert als auch null sind Datentypen und Werte
danwellman
9
nullAbsolut ist ein Datentyp: msdn.microsoft.com/en-us/library/ie/7wkd9z69(v=vs.94).aspx. Die Tatsache, dass typeof nullzurückgegeben objectwird , ist ein bekannter und dokumentierter Fehler in früheren Versionen von ECMAScript, der aus Gründen der Abwärtskompatibilität erhalten geblieben ist. Der Link, den Sie tatsächlich in Ihrem Kommentar gepostet haben, sagt auf halber Höhe der Seite "typeof null // object (Fehler in ECMAScript, sollte null sein)"! Zeigen Sie also bitte einige
Suchanstrengungen,
1
Definitionen widersprechen: "Wertlosigkeit" vs "wurde kein Wert zugewiesen". Ist es nicht dasselbe?
Zon
3
Ich bin mit dieser Antwort nicht einverstanden. Null und undefiniert sind unterschiedliche Datentypen. null ist vom Typ null und undefined ist vom Typ undefined. Nur wenn wir einen wahrheitsgemäßen Operator (==) verwenden, können wir sehen, dass Javascript sagt, dass es wahr ist, aber ein strenger Vergleich (===) ein falsches ergibt.
Alaboudi
19
null : fehlender Wert für eine Variable; undefiniert : Fehlen der Variablen selbst;
..where Variable ist ein symbolischer Name, der einem Wert zugeordnet ist.
JS könnte so freundlich sein, neu deklarierte Variablen implizit mit null zu initiieren , tut dies jedoch nicht.
var a = {}; a.n = undefined;' then ..a.hasOwnProperty ('n') == true` ... also ist das Fehlen einer Variablen selbst nicht mehr korrekt
Muhammad Umer
17
Bitte lesen Sie Folgendes sorgfältig durch. Es wird alle Ihre Zweifel bezüglich des Unterschieds zwischen null und undefiniert in JavaScript beseitigen . Sie können auch die unten angegebene Dienstprogrammfunktion verwenden, um die Typen genau zu bestimmen.
In JavaScript können wir folgende Arten von Variablen haben.
Nicht deklarierte Variablen
Deklarierte, aber nicht zugewiesene Variablen
Mit undefiniertem Literal zugewiesene Variablen
Mit Literal null zugewiesene Variablen
Variablen, denen etwas anderes als undefiniert oder null zugewiesen wurde
Im Folgenden wird jeder dieser Fälle einzeln erläutert
Nicht deklarierte Variablen : Das Folgende gilt für nicht deklarierte Variablen
Kann nur von typeof () überprüft werden, das die Zeichenfolge 'undefined' zurückgibt.
Kann nicht mit == oder === oder von if oder bedingtem Operator überprüft werden ? (wirft Referenzfehler)
Deklarierte, aber nicht zugewiesene Variablen
typeof gibt die Zeichenfolge 'undefined' zurück
== check with null gibt true zurück
== check with undefined gibt true zurück
=== check with null gibt false zurück
=== check with undefined gibt true zurück
ob oder bedingter Operator ? gibt false zurück
Mit undefiniertem Literal zugewiesene Variablen : Diese Variablen werden ähnlich wie die deklarierten, aber nicht zugewiesenen Variablen behandelt .
Mit Literal null zugewiesene Variablen
typeof gibt die Zeichenfolge 'object' zurück
== check with null gibt true zurück
== check with undefined gibt true zurück
=== check with null gibt true zurück
=== check with undefined gibt false zurück
ob oder bedingter Operator ? gibt false zurück
Variablen, denen etwas anderes als undefiniert oder null zugewiesen wurde
typeof gibt eine der folgenden Zeichenfolgen zurück: 'string' , 'number' , 'boolean' , 'function' , 'object' , 'symbol'
Im Folgenden finden Sie den Algorithmus für die korrekte Typprüfung einer Variablen:
Überprüfen Sie mit typeof , ob nicht deklariert / nicht zugewiesen / mit undefiniert zugewiesen wurde . Rückgabe, wenn die Zeichenfolge 'undefined' zurückgegeben wird.
Überprüfen Sie mit === auf Null . Geben Sie 'null' zurück, wenn true .
Überprüfen Sie den tatsächlichen Typ mit typeof . Rückgabetyp, wenn nicht gleich 'Objekt'
Rufen Sie Object.prototype.toString.call (o) auf, um den tatsächlichen Objekttyp zu bestimmen. Es wird eine Zeichenfolge vom Typ '[object ObjectType]' für alle in Javascript oder DOM definierten Objekte zurückgegeben. Für benutzerdefinierte Objekte wird '[Objekt Objekt]' zurückgegeben.
Sie können auch die folgende Dienstprogrammfunktion zum Bestimmen von Typen verwenden. Derzeit werden alle ECMA 262 2017-Typen unterstützt.
Sie können undefiniert als Darstellung eines unerwarteten oder fehlerhaften Fehlens eines Werts auf Systemebene und null als Darstellung eines normalen oder erwarteten Fehlens eines Werts auf Programmebene betrachten.
Ich werde erklären undefined, nullund Uncaught ReferenceError:
1 - Uncaught ReferenceError: Variable wurde in Ihrem Skript nicht deklariert , es gibt keinen Verweis auf diese Variable.
2 - undefined: Variable deklariert, aber nicht initialisiert.
3 - null: Variable deklariert und ist ein leerer Wert
null und undefiniert sind zwei unterschiedliche Objekttypen, die Folgendes gemeinsam haben:
beide können nur einen einzigen Wert enthalten, null bzw. undefiniert ;
Beide haben keine Eigenschaften oder Methoden, und der Versuch, Eigenschaften von beiden zu lesen, führt zu einem Laufzeitfehler (für alle anderen Objekte erhalten Sie einen undefinierten Wert, wenn Sie versuchen, eine nicht vorhandene Eigenschaft zu lesen).
Werte null und undefiniert werden von ==und !=Operatoren als gleich und zu nichts anderem betrachtet .
Die Ähnlichkeiten enden jedoch hier. Ausnahmsweise gibt es einen grundlegenden Unterschied in der Art und Weise, wie Schlüsselwörter null und undefiniert implementiert werden. Dies ist nicht offensichtlich, aber betrachten Sie das folgende Beispiel:
varundefined="foo";WScript.Echo(undefined);// This will print: foo
undefined , NaN und Infinity sind nur Namen von vorinitialisierten "superglobalen" Variablen - sie werden zur Laufzeit initialisiert und können von normalen globalen oder lokalen Variablen mit denselben Namen überschrieben werden.
Versuchen wir jetzt dasselbe mit null :
varnull="foo";// This will cause a compile-time errorWScript.Echo(null);
Hoppla! null , true und false sind reservierte Schlüsselwörter. Der Compiler lässt Sie nicht als Variablen- oder Eigenschaftsnamen verwenden
Ein weiterer Unterschied ist der undefined ein primitiver Typ ist, während null ein Objekttyp ist (was auf das Fehlen einer Objektreferenz hinweist). Folgendes berücksichtigen:
WScript.Echo(typeoffalse);// Will print: booleanWScript.Echo(typeof0);// Will print: numberWScript.Echo(typeof"");// Will print: stringWScript.Echo(typeof{});// Will print: objectWScript.Echo(typeofundefined);// Will print: undefinedWScript.Echo(typeofnull);// (!!!) Will print: object
Es gibt auch einen wichtigen Unterschied in der Art und Weise und null und undefiniert im numerischen Kontext behandelt werden:
var a;// declared but uninitialized variables hold the value undefinedWScript.Echo(a ===undefined);// Prints: -1var b =null;// the value null must be explicitly assigned WScript.Echo(b ===null);// Prints: -1WScript.Echo(a == b);// Prints: -1 (as expected)WScript.Echo(a >= b);// Prints: 0 (WTF!?)WScript.Echo(a >= a);// Prints: 0 (!!!???)WScript.Echo(isNaN(a));// Prints: -1 (a evaluates to NaN!)WScript.Echo(1*a);// Prints: -1.#IND (in Echo output this means NaN)WScript.Echo(b >= b);// Prints: -1 (as expected)WScript.Echo(isNaN(b));// Prints: 0 (b evaluates to a valid number)WScript.Echo(1*b);// Prints: 0 (b evaluates to 0)WScript.Echo(a >=0&& a <=0);// Prints: 0 (as expected)WScript.Echo(a ==0);// Prints: 0 (as expected)WScript.Echo(b >=0&& b <=0);// Prints: -1 (as expected)WScript.Echo(b ==0);// Prints: 0 (!!!)
null wird 0 wenn es in arithmetischen Ausdrücken oder numerischen Vergleichen verwendet wird - ähnlich wie false ist es im Grunde nur eine spezielle Art von "Null". undefined hingegen ist ein wahres "Nichts" und wird zu NaN ("keine Zahl"), wenn Sie versuchen, es im numerischen Kontext zu verwenden.
Beachten Sie, dass null und undefiniert eine Sonderbehandlung von ==und !=Operatoren erhalten, Sie jedoch die wahre numerische Gleichheit von a und b mit dem Ausdruck testen können(a >= b && a <= b) .
Verwenden nullSie diese Option, um eine Variable festzulegen, von der Sie wissen, dass es sich um ein Objekt handelt.
Verwenden Sie diese Option, undefinedum eine Variable festzulegen, deren Typ gemischt ist.
Dies ist meine Verwendung von 5 Grundelementen und Objekttyp, und das erklärt den Unterschied zwischen «Anwendungsfall» von undefinedoder null.
String
Wenn Sie wissen, dass eine Variable während des gesamten Lebenszyklus nur eine Zeichenfolge ist, können Sie sie gemäß Konvention wie folgt initialisieren "":
Wenn Sie wissen, dass eine Variable während des gesamten Lebenszyklus nur eine Zahl ist, können Sie sie gemäß Konvention initialisieren, um 0(oder NaNwenn dies 0ein wichtiger Wert in Ihrer Verwendung ist):
Wenn Sie wissen, dass eine Variable während des gesamten Lebenszyklus nur ein Boolescher Wert ist, können Sie sie gemäß Konvention wie folgt initialisieren false:
Wenn Sie wissen, dass eine Variable während des gesamten Lebenszyklus nur ein Objekt ist, können Sie sie gemäß Konvention wie folgt initialisieren null:
Hinweis: Die intelligente Verwendung von null soll die falsche Version eines Objekts sein, da ein Objekt immer trueist und weil typeof nullreturn object. Dies bedeutet typeof myVarObject, dass sowohl für den Objekt- als auch für den Nulltyp ein konsistenter Wert zurückgegeben wird.
Alle
Wenn Sie wissen, dass eine Variable einen gemischten Typ hat (einen beliebigen Typ während des gesamten Lebenszyklus), können Sie ihn gemäß Konvention auf initialisieren undefined.
Es ist wichtig zu beachten, dass dies undefinedzwar bedeuten kann, dass eine Variable nicht deklariert wurde, dies jedoch nicht garantiert. Eine Variable kann als deklariert werden var thing;und ist gleich undefined.
Yura
6
Der beste Weg, um den Unterschied zu verstehen, besteht darin, sich zunächst über das Innenleben von JavaScript zu informieren und nur die Bedeutungsunterschiede zu verstehen zwischen:
let supervisor ="None"// I have a supervisor named "None"let supervisor =null// I do NOT have a supervisor. It is a FACT that I do not.let supervisor =undefined// I may or may not have a supervisor. I either don't know// if I do or not, or I am choosing not to tell you. It is// irrelevant or none of your business.
Es gibt einen Unterschied in der Bedeutung zwischen diesen drei Fällen, und JavaScript unterscheidet die beiden letztgenannten Fälle mit zwei unterschiedlichen Werten nullund undefined. Es steht Ihnen frei, diese Werte explizit zu verwenden, um diese Bedeutungen zu vermitteln.
Was sind also einige der JavaScript-spezifischen Probleme, die aufgrund dieser philosophischen Grundlage auftreten?
Eine deklarierte Variable ohne Initialisierer erhält den Wert, undefinedweil Sie nie etwas über den beabsichtigten Wert gesagt haben.
let supervisor;
assert(supervisor ===undefined);
Eine Eigenschaft eines Objekts, die noch nie festgelegt wurde, wird ausgewertet, undefinedda niemand jemals etwas über diese Eigenschaft gesagt hat.
const dog ={ name:'Sparky', age:2};
assert(dog.breed ===undefined);
nullund undefinedsind einander "ähnlich", weil Brendan Eich es gesagt hat. Aber sie sind einander nachdrücklich nicht gleich.
nullund zum undefinedGlück haben verschiedene Arten.nullgehört zum Typ Nullund undefinedzum Typ Undefined. Dies ist in der Spezifikation, aber Sie würden dies nie wegen der typeofVerrücktheit wissen, die ich hier nicht wiederholen werde.
Eine Funktion, die ohne explizite return-Anweisung das Ende ihres Körpers erreicht, wird zurückgegeben, undefinedda Sie nichts darüber wissen, was sie zurückgegeben hat.
Übrigens gibt es in JavaScript andere Formen des "Nichts" (es ist gut, Philosophie studiert zu haben ...)
NaN
Verwenden einer nie deklarierten Variablen und Empfangen einer ReferenceError
Verwendung einer let oder einer constdefinierten lokalen Variablen in ihrer zeitlichen Totzone und Empfangen von aReferenceError
Leere Zellen in spärlichen Arrays. Ja, das sind nicht einmal, undefinedobwohl sie ===mit undefiniert verglichen werden .
$ node
>const a =[1,undefined,2]>const b =[1,,2]> a
[1,undefined,2]> b
[1,<1 empty item>,2]
Beste Antwort! Die meisten Antworten ignorieren die Tatsache, dass Sie den Wert einer Variablenundefined wie im let supervisor = undefinedFall definieren können.
J. Bruni
Vielen Dank, und ja, dieses Missverständnis, dass etwas undefinednur dann ist , wenn es nicht deklariert wurde oder noch keinen Wert erhalten hat, ist so weit verbreitet und es ist wirklich schwierig, Menschen zu vermitteln (obwohl ich es immer wieder versuche). So viele Menschen JavaScript trash sowohl für mit nullund undefinedaber diese Werte haben haben völlig unterschiedliche Bedeutungen haben und zum größten Teil arbeiten sie gut mit ihren beabsichtigten Bedeutungen (IMHO natürlich).
Ray Toal
5
In JavasSript gibt es 5 primitive Datentypen: String, Number, Boolean, null und undefined. Ich werde versuchen, dies anhand eines einfachen Beispiels zu erklären
Nehmen wir an, wir haben eine einfache Funktion
function test(a){if(a ==null){
alert("a is null");}else{
alert("The value of a is "+ a);}}
auch in der obigen Funktion, wenn (a == null) dasselbe ist wie wenn (! a)
Jetzt, wenn wir diese Funktion aufrufen, ohne den Parameter a zu übergeben
test(); it will alert "a is null";
test(4); it will alert "The value of a is "+4;
ebenfalls
var a;
alert(typeof a);
dies wird undefiniert geben; Wir haben eine Variable deklariert, dieser Variablen jedoch keinen Wert zugewiesen. aber wenn wir schreiben
var a =null;
alert(typeof a); will give alert as object
also ist null ein Objekt. In gewisser Weise haben wir 'a' den Wert null zugewiesen.
Für den undefinedTyp gibt es nur einen Wert : undefined.
Für den nullTyp gibt es nur einen Wert : null.
Für beide ist das Etikett sowohl der Typ als auch der Wert.
Der Unterschied zwischen ihnen. Zum Beispiel:
null ist ein leerer Wert
undefined ist ein fehlender Wert
Oder:
undefined hat noch keinen Wert gehabt
null hatte einen Wert und tut es nicht mehr
Eigentlich nullist ein spezielles Schlüsselwort , nicht um einen Bezeichner. Daher können Sie es nicht als Variable behandeln, der Sie zuweisen möchten.
Ist undefinedjedoch eine Kennung . Sowohl im non-strictModus als auch im strictModus können Sie jedoch eine lokale Variable mit dem Namen undefined erstellen. Aber das ist eine schreckliche Idee!
function foo(){undefined=2;// bad idea!}
foo();function foo(){"use strict";undefined=2;// TypeError!}
foo();
Wenn Sie eine Variable in Javascript deklarieren, wird ihr der Wert zugewiesen undefined. Dies bedeutet, dass die Variable unberührt bleibt und zukünftig einem beliebigen Wert zugewiesen werden kann. Dies bedeutet auch, dass Sie den Wert, den diese Variable zum Zeitpunkt der Deklaration enthalten wird, nicht kennen.
Jetzt können Sie explizit eine Variable zuweisen null . Dies bedeutet, dass die Variable keinen Wert hat. Zum Beispiel - Einige Leute haben keinen zweiten Vornamen. In einem solchen Fall ist es daher besser, der mittleren Namensvariablen eines Personenobjekts den Wert null zuzuweisen.
Angenommen, jemand greift auf die Mittelnamenvariable Ihres Personenobjekts zu und sie hat den Wert undefined. Er würde nicht wissen, ob der Entwickler vergessen hat, diese Variable zu initialisieren, oder ob sie keinen Wert hatte. Wenn es den Wert hat null, kann der Benutzer leicht schließen, dass der mittlere Name keinen Wert hat und keine unberührte Variable ist.
undefinierte Objekteigenschaften sind ebenfalls undefiniert. Zum Beispiel ist "x" für Objekt c nicht definiert. Wenn Sie versuchen, auf cx zuzugreifen, wird undefiniert zurückgegeben.
Im Allgemeinen weisen wir Variablen, die nicht undefiniert sind, null zu.
Per Ryan Morrs ausführlicher Artikel zu diesem Thema ...
"Wenn Sie einer Variablen oder Eigenschaft einen Nichtwert zuweisen, ihn an eine Funktion übergeben oder von einer Funktion zurückgeben müssen, ist null im Allgemeinen fast immer die beste Option. Einfach ausgedrückt verwendet JavaScript undefiniert und Programmierer sollten dies tun." benutze null. "
Sowohl Null als auch undefiniert in JavaScript zeigen an, dass kein Wert vorhanden ist.
var a =null;//variable assigned null valuevar b;// undefined
Trotz der Tatsache, dass beide für das Fehlen von Wert existieren, aber: Undefiniert bedeutet tatsächlich, dass die Variable nicht initialisiert wird. Funktionen, die nichts zurückgeben, und Funktionsparameter, für die kein Wert angegeben wird, undefinierter Wert werden zurückgegeben. Verwenden Sie den strengen Gleichheitsoperator ===, um zwischen null und undefiniert zu unterscheiden.
OK, so können wir verwirrt, wenn wir hören , nullund undefined, aber wir beginnen , es einfach, sie sind beide falsy und in vielerlei Hinsicht ähnlich, aber seltsame Teil JavaScript, sie machen ein paar wesentliche Unterschiede zum Beispiel typeofnull ist 'object'während typeofundefined ist 'undefined'.
Wenn Sie ==sie jedoch wie folgt überprüfen , sehen Sie, dass beide falsch sind :
null==undefined;//true
Sie können auch nulleine Objekteigenschaft oder ein Grundelement zuweisen , währendundefined dies einfach erreicht werden kann, indem Sie nichts zuweisen.
Ich erstelle ein schnelles Bild, um Ihnen die Unterschiede auf einen Blick zu zeigen.
Da typeof undefined zurückgibt, ist undefined ein Typ, bei dem null als Initialisierer angibt, dass die Variablen auf kein Objekt verweisen (praktisch alles in Javascript ist ein Objekt).
In Javascript werden alle Variablen als Schlüsselwertpaare gespeichert. Jede Variable wird als Variablenname gespeichert : Variablenwert / Referenz .
nicht definiert bedeutet, dass einer Variablen ein Leerzeichen im Speicher zugewiesen wurde, ihr jedoch kein Wert zugewiesen wurde. Als bewährte Methode sollten Sie diesen Typ nicht als Zuweisung verwenden.
Wie kann in diesem Fall angegeben werden, wann eine Variable zu einem späteren Zeitpunkt im Code wertlos sein soll? Sie können den Typ
null verwenden , bei dem es sich auch um einen Typ handelt, mit dem dasselbe definiert wird, wenn kein Wert vorhanden ist, der jedoch nicht mit undefiniert identisch ist, da Sie in diesem Fall den Wert tatsächlich im Speicher haben. Dieser Wert ist null
Beide sind ähnlich, aber Verwendung und Bedeutung sind unterschiedlich.
Ich möchte einen sehr subtilen Unterschied zwischen nullund hinzufügen, undefinedder gut zu wissen ist, wenn Sie versuchen, Vanilla JavaScript (JS) von Grund auf zu lernen:
nullist ein reserviertes Schlüsselwort in JS, während undefinedes sich um eine Variable für das globale Objekt der Laufzeitumgebung handelt, in der Sie sich befinden.
Beim Schreiben von Code ist dieser Unterschied nicht als beides erkennbar nullund undefinedwird immer in RHS einer JavaScript-Anweisung verwendet. Wenn Sie sie jedoch in LHS eines Ausdrucks verwenden, können Sie diesen Unterschied leicht beobachten. Der JS-Interpreter interpretiert den folgenden Code als Fehler:
varnull='foo'
Es gibt unten Fehler:
Nicht erfasster SyntaxError: Unerwartetes Token null
Während der folgende Code erfolgreich ausgeführt wird, obwohl ich dies im wirklichen Leben nicht empfehlen werde:
varundefined='bar'
Dies funktioniert, weil undefinedes sich um eine Variable für das globale Objekt handelt (Browserfensterobjekt bei clientseitigem JS).
undefined='bar'weist keinen Wert zu undefined(der unveränderlich ist), wirft nur keinen verwirrenden Fehler.
Dmitri Zaitsev
1
Der Unterschied zwischen undefinedund nullist minimal, aber es gibt einen Unterschied. Eine Variable mit dem Wert undefinedwurde nie initialisiert. Eine Variable, deren Wert nullexplizit angegeben ist, hat den Wert von null. Dies bedeutet, dass die Variable explizit so festgelegt wurde, dass sie keinen Wert hat. Wenn Sie vergleichen undefinedund nullden null==undefinedAusdruck verwenden, sind sie gleich.
Diese Antwort ist irreführend ... siehe die Diskussion in der akzeptierten Antwort. Fazit - null==undefinedliegt truenur am impliziten Casting (oder dem entsprechenden Begriff in JS). Dies null===undefinedliegt offensichtlich daran, falsedass die Verwendung bei der Verwendung auch ===den Typ vergleicht .
Guyarad
1
Grundsätzlich ist Undefined eine globale Variable, die Javascript zur Laufzeit erstellt, unabhängig davon, ob der Variablen null zugewiesen wurde (tatsächlich ist null selbst ein Objekt).
Nehmen wir ein Beispiel:
var x;//we declared a variable x, but no value has been assigned to it.
document.write(x)//let's print the variable x
Undefiniert erhalten Sie diese Ausgabe.
Jetzt,
x=5;
y=null;
z=x+y;
und Sie erhalten 5 als Ausgabe. Das ist der Hauptunterschied zwischen Undefiniert und Null
Daraus habe ich tatsächlich gelernt, dass es isNaN(null)zurückkehrt false- was mich überrascht hat.
J. Bruni
0
Beide Sonderwerte implizieren einen leeren Zustand.
Der Hauptunterschied besteht darin, dass undefined den Wert einer Variablen darstellt, die noch nicht initialisiert wurde, während null das absichtliche Fehlen eines Objekts darstellt.
Die Variablennummer ist definiert, jedoch nicht mit einem Anfangswert versehen:
let number;
number;// => undefined
Die Zahlenvariable ist undefiniert, was eindeutig auf eine nicht initialisierte Variable hinweist
Das gleiche nicht initialisierte Konzept tritt auf, wenn auf eine nicht vorhandene Objekteigenschaft zugegriffen wird:
Da die Eigenschaft lastName in obj nicht vorhanden ist, wertet JavaScript obj.lastName korrekt als undefiniert aus.
In anderen Fällen wissen Sie, dass eine Variable erwartet, ein Objekt oder eine Funktion zu halten, um ein Objekt zurückzugeben. Aus irgendeinem Grund können Sie das Objekt jedoch nicht instanziieren. In einem solchen Fall ist null ein aussagekräftiger Indikator für ein fehlendes Objekt.
Zum Beispiel ist clone () eine Funktion, die ein einfaches JavaScript-Objekt klont. Es wird erwartet, dass die Funktion ein Objekt zurückgibt:
Clone () kann jedoch mit einem Nicht-Objekt-Argument aufgerufen werden: 15 oder null (oder im Allgemeinen einem primitiven Wert, null oder undefiniert). In diesem Fall kann die Funktion keinen Klon erstellen und gibt daher null zurück - den Indikator für ein fehlendes Objekt.
Der Typ des Operators unterscheidet zwischen den beiden Werten:
Wenn eine Variable nicht initialisiert ist, ist sie undefiniert. undefined ist kein Objekt. Beispiel: var MyName; console.log (Typ von MyName);
Überprüfen Sie das Entwicklungstool für die Konsolenanmeldung. Es wird als undefiniert gedruckt.
null ist ein Objekt. Wenn eine Variable null sein soll, wird null verwendet. Es gibt keine Variable, aber der Wert ist nicht bekannt. Sie sollte einer Variablen programmatisch zugewiesen werden. null wird nicht automatisch initialisiert.
Beispiel: var MyName = null; console.log (Typ von MyName); Überprüfen Sie das csole-Protokoll im Entwicklungstool, es wird ein Objekt sein.
null
Wert in JavaScript?null
Ist es leer, istundefined
es leer, weil es nicht gesetzt wurde. Odernull
ist absichtlich leer, solangeundefined
es noch leer ist. Grundsätzlich zeigt es Absicht.Antworten:
In JavaScript
undefined
bedeutet dies , dass eine Variable deklariert wurde, aber noch kein Wert zugewiesen wurde, z.null
ist ein Zuweisungswert. Es kann einer Variablen als Darstellung ohne Wert zugewiesen werden:Aus den vorstehenden Beispielen ist es klar , dass
undefined
undnull
zwei verschiedene Typen:undefined
ein Typ selbst (nicht definiert) , währendnull
ein Objekt ist.und
quelle
Ich habe das hier ausgewählt
Wenn Sie eine Variable über var deklarieren und ihr keinen Wert geben, ist der Wert undefiniert. Wenn Sie versuchen, diesen Wert für WScript.Echo () oder alert () zu verwenden, wird an sich nichts angezeigt. Wenn Sie jedoch eine leere Zeichenfolge anhängen, wird plötzlich Folgendes angezeigt:
Sie können eine Variable deklarieren, auf null setzen und das Verhalten ist identisch, außer dass "null" im Vergleich zu "undefiniert" ausgedruckt wird. Dies ist in der Tat ein kleiner Unterschied.
Sie können sogar eine undefinierte Variable mit null vergleichen oder umgekehrt, und die Bedingung ist wahr:
Es werden jedoch zwei verschiedene Typen betrachtet. Während undefined ein eigenständiger Typ ist, wird null als spezieller Objektwert betrachtet. Sie können dies sehen, indem Sie typeof () verwenden, das eine Zeichenfolge zurückgibt, die den allgemeinen Typ einer Variablen darstellt:
Das Ausführen des obigen Skripts führt zu der folgenden Ausgabe:
Unabhängig davon, ob es sich um unterschiedliche Typen handelt, verhalten sie sich immer noch gleich, wenn Sie versuchen, auf ein Mitglied eines der beiden zuzugreifen, z. B., dass sie eine Ausnahme auslösen. Mit WSH werden Sie sehen, dass der gefürchtete "'varname' ist null oder kein Objekt" und das ist, wenn Sie Glück haben (aber das ist ein Thema für einen anderen Artikel).
Sie können eine Variable explizit als undefiniert festlegen, aber ich rate dringend davon ab. Ich empfehle, nur Variablen auf null zu setzen und den Wert für Dinge, die Sie vergessen haben, undefiniert zu lassen. Gleichzeitig ermutige ich Sie wirklich, immer jede Variable festzulegen. JavaScript hat eine andere Bereichskette als die Sprachen im C-Stil, die selbst erfahrene Programmierer leicht verwirrt. Das Setzen von Variablen auf Null ist der beste Weg, um darauf basierende Fehler zu vermeiden.
Eine andere Instanz, in der ein undefiniertes Popup angezeigt wird, ist die Verwendung des Löschoperators. Diejenigen von uns aus einer C-Welt könnten dies fälschlicherweise als Zerstörung eines Objekts interpretieren, aber es ist nicht so. Mit dieser Operation wird ein Index aus einem Array oder ein Mitglied aus einem Objekt entfernt. Bei Arrays wirkt sich dies nicht auf die Länge aus, sondern darauf, dass der Index jetzt als undefiniert betrachtet wird.
Das Ergebnis des obigen Skripts ist:
Sie erhalten auch eine undefinierte Rückgabe, wenn Sie einen Index oder ein Mitglied lesen, das noch nie existiert hat.
Der Unterschied zwischen null und undefiniert ist: JavaScript setzt niemals etwas auf null, das ist normalerweise das, was wir tun. Während wir Variablen auf undefiniert setzen können, bevorzugen wir null, da dies nie für uns getan wird. Wenn Sie debuggen, bedeutet dies, dass alles, was auf null gesetzt ist, von Ihnen selbst und nicht von JavaScript ausgeführt wird. Darüber hinaus sind diese beiden Sonderwerte nahezu gleichwertig.
quelle
(Hinzufügen von Zeichen aufgrund fehlender Zeichen, daher darf ich dies posten.)
quelle
null ist ein spezielles Schlüsselwort, das auf das Fehlen eines Werts hinweist.
Betrachten Sie es als einen Wert, wie:
Eine undefinierte Eigenschaft gibt an, dass einer Variablen kein Wert einschließlich Null zugewiesen wurde. Mögen
Die definierte leere Variable ist
null
vom Datentypundefined
Beide repräsentieren einen Wert einer Variablen ohne Wert
AND
null
stellt keine Zeichenfolge dar , die keinen Wert hat - leere Zeichenfolge-Mögen
Nun wenn
ABER
SO hat jeder seine eigene Art zu benutzen
undefined Verwenden Sie diese Option, um den variablen Datentyp zu vergleichen
null Verwenden Sie diese Option, um einen Wert einer Variablen zu leeren
quelle
null
Absolut ist ein Datentyp: msdn.microsoft.com/en-us/library/ie/7wkd9z69(v=vs.94).aspx. Die Tatsache, dasstypeof null
zurückgegebenobject
wird , ist ein bekannter und dokumentierter Fehler in früheren Versionen von ECMAScript, der aus Gründen der Abwärtskompatibilität erhalten geblieben ist. Der Link, den Sie tatsächlich in Ihrem Kommentar gepostet haben, sagt auf halber Höhe der Seite "typeof null // object (Fehler in ECMAScript, sollte null sein)"! Zeigen Sie also bitte einigenull : fehlender Wert für eine Variable; undefiniert : Fehlen der Variablen selbst;
..where Variable ist ein symbolischer Name, der einem Wert zugeordnet ist.
JS könnte so freundlich sein, neu deklarierte Variablen implizit mit null zu initiieren , tut dies jedoch nicht.
quelle
var a = {}; a.n = undefined;' then ..
a.hasOwnProperty ('n') == true` ... also ist das Fehlen einer Variablen selbst nicht mehr korrektBitte lesen Sie Folgendes sorgfältig durch. Es wird alle Ihre Zweifel bezüglich des Unterschieds zwischen null und undefiniert in JavaScript beseitigen . Sie können auch die unten angegebene Dienstprogrammfunktion verwenden, um die Typen genau zu bestimmen.
In JavaScript können wir folgende Arten von Variablen haben.
Im Folgenden wird jeder dieser Fälle einzeln erläutert
Nicht deklarierte Variablen : Das Folgende gilt für nicht deklarierte Variablen
Deklarierte, aber nicht zugewiesene Variablen
Mit undefiniertem Literal zugewiesene Variablen : Diese Variablen werden ähnlich wie die deklarierten, aber nicht zugewiesenen Variablen behandelt .
Mit Literal null zugewiesene Variablen
Variablen, denen etwas anderes als undefiniert oder null zugewiesen wurde
Im Folgenden finden Sie den Algorithmus für die korrekte Typprüfung einer Variablen:
Sie können auch die folgende Dienstprogrammfunktion zum Bestimmen von Typen verwenden. Derzeit werden alle ECMA 262 2017-Typen unterstützt.
quelle
via JavaScript: Der endgültige Leitfaden
quelle
Ich werde erklären
undefined
,null
undUncaught ReferenceError
:1 -
Uncaught ReferenceError
: Variable wurde in Ihrem Skript nicht deklariert , es gibt keinen Verweis auf diese Variable.2 -
undefined
: Variable deklariert, aber nicht initialisiert.3 -
null
: Variable deklariert und ist ein leerer Wertquelle
Undefiniert bedeutet, dass eine Variable deklariert wurde, aber keinen Wert hat:
Null ist eine Aufgabe:
quelle
null und undefiniert sind zwei unterschiedliche Objekttypen, die Folgendes gemeinsam haben:
==
und!=
Operatoren als gleich und zu nichts anderem betrachtet .Die Ähnlichkeiten enden jedoch hier. Ausnahmsweise gibt es einen grundlegenden Unterschied in der Art und Weise, wie Schlüsselwörter null und undefiniert implementiert werden. Dies ist nicht offensichtlich, aber betrachten Sie das folgende Beispiel:
undefined , NaN und Infinity sind nur Namen von vorinitialisierten "superglobalen" Variablen - sie werden zur Laufzeit initialisiert und können von normalen globalen oder lokalen Variablen mit denselben Namen überschrieben werden.
Versuchen wir jetzt dasselbe mit null :
Hoppla! null , true und false sind reservierte Schlüsselwörter. Der Compiler lässt Sie nicht als Variablen- oder Eigenschaftsnamen verwenden
Ein weiterer Unterschied ist der undefined ein primitiver Typ ist, während null ein Objekttyp ist (was auf das Fehlen einer Objektreferenz hinweist). Folgendes berücksichtigen:
Es gibt auch einen wichtigen Unterschied in der Art und Weise und null und undefiniert im numerischen Kontext behandelt werden:
null wird 0 wenn es in arithmetischen Ausdrücken oder numerischen Vergleichen verwendet wird - ähnlich wie false ist es im Grunde nur eine spezielle Art von "Null". undefined hingegen ist ein wahres "Nichts" und wird zu NaN ("keine Zahl"), wenn Sie versuchen, es im numerischen Kontext zu verwenden.
Beachten Sie, dass null und undefiniert eine Sonderbehandlung von
==
und!=
Operatoren erhalten, Sie jedoch die wahre numerische Gleichheit von a und b mit dem Ausdruck testen können(a >= b && a <= b)
.quelle
tl; dr
Verwenden
null
Sie diese Option, um eine Variable festzulegen, von der Sie wissen, dass es sich um ein Objekt handelt.Verwenden Sie diese Option,
undefined
um eine Variable festzulegen, deren Typ gemischt ist.Dies ist meine Verwendung von 5 Grundelementen und Objekttyp, und das erklärt den Unterschied zwischen «Anwendungsfall» von
undefined
odernull
.String
Wenn Sie wissen, dass eine Variable während des gesamten Lebenszyklus nur eine Zeichenfolge ist, können Sie sie gemäß Konvention wie folgt initialisieren
""
:Nummer
Wenn Sie wissen, dass eine Variable während des gesamten Lebenszyklus nur eine Zahl ist, können Sie sie gemäß Konvention initialisieren, um
0
(oderNaN
wenn dies0
ein wichtiger Wert in Ihrer Verwendung ist):oder
Boolescher Wert
Wenn Sie wissen, dass eine Variable während des gesamten Lebenszyklus nur ein Boolescher Wert ist, können Sie sie gemäß Konvention wie folgt initialisieren
false
:Objekt
Wenn Sie wissen, dass eine Variable während des gesamten Lebenszyklus nur ein Objekt ist, können Sie sie gemäß Konvention wie folgt initialisieren
null
:Hinweis: Die intelligente Verwendung von null soll die falsche Version eines Objekts sein, da ein Objekt immer
true
ist und weiltypeof null
returnobject
. Dies bedeutettypeof myVarObject
, dass sowohl für den Objekt- als auch für den Nulltyp ein konsistenter Wert zurückgegeben wird.Alle
Wenn Sie wissen, dass eine Variable einen gemischten Typ hat (einen beliebigen Typ während des gesamten Lebenszyklus), können Sie ihn gemäß Konvention auf initialisieren
undefined
.quelle
null
ist ein spezieller Wert, der "kein Wert" bedeutet.null
ist ein spezielles Objekt, datypeof null
'Objekt' zurückgegeben wird.Andererseits
undefined
bedeutet dies, dass die Variable nicht deklariert wurde oder keinen Wert erhalten hat.quelle
undefined
zwar bedeuten kann, dass eine Variable nicht deklariert wurde, dies jedoch nicht garantiert. Eine Variable kann als deklariert werdenvar thing;
und ist gleichundefined
.Der beste Weg, um den Unterschied zu verstehen, besteht darin, sich zunächst über das Innenleben von JavaScript zu informieren und nur die Bedeutungsunterschiede zu verstehen zwischen:
Es gibt einen Unterschied in der Bedeutung zwischen diesen drei Fällen, und JavaScript unterscheidet die beiden letztgenannten Fälle mit zwei unterschiedlichen Werten
null
undundefined
. Es steht Ihnen frei, diese Werte explizit zu verwenden, um diese Bedeutungen zu vermitteln.Was sind also einige der JavaScript-spezifischen Probleme, die aufgrund dieser philosophischen Grundlage auftreten?
Eine deklarierte Variable ohne Initialisierer erhält den Wert,
undefined
weil Sie nie etwas über den beabsichtigten Wert gesagt haben.Eine Eigenschaft eines Objekts, die noch nie festgelegt wurde, wird ausgewertet,
undefined
da niemand jemals etwas über diese Eigenschaft gesagt hat.null
undundefined
sind einander "ähnlich", weil Brendan Eich es gesagt hat. Aber sie sind einander nachdrücklich nicht gleich.null
und zumundefined
Glück haben verschiedene Arten.null
gehört zum TypNull
undundefined
zum TypUndefined
. Dies ist in der Spezifikation, aber Sie würden dies nie wegen dertypeof
Verrücktheit wissen, die ich hier nicht wiederholen werde.Eine Funktion, die ohne explizite return-Anweisung das Ende ihres Körpers erreicht, wird zurückgegeben,
undefined
da Sie nichts darüber wissen, was sie zurückgegeben hat.Übrigens gibt es in JavaScript andere Formen des "Nichts" (es ist gut, Philosophie studiert zu haben ...)
NaN
ReferenceError
let
oder einerconst
definierten lokalen Variablen in ihrer zeitlichen Totzone und Empfangen von aReferenceError
Leere Zellen in spärlichen Arrays. Ja, das sind nicht einmal,
undefined
obwohl sie===
mit undefiniert verglichen werden .quelle
undefined
wie imlet supervisor = undefined
Fall definieren können.undefined
nur dann ist , wenn es nicht deklariert wurde oder noch keinen Wert erhalten hat, ist so weit verbreitet und es ist wirklich schwierig, Menschen zu vermitteln (obwohl ich es immer wieder versuche). So viele Menschen JavaScript trash sowohl für mitnull
undundefined
aber diese Werte haben haben völlig unterschiedliche Bedeutungen haben und zum größten Teil arbeiten sie gut mit ihren beabsichtigten Bedeutungen (IMHO natürlich).In JavasSript gibt es 5 primitive Datentypen: String, Number, Boolean, null und undefined. Ich werde versuchen, dies anhand eines einfachen Beispiels zu erklären
Nehmen wir an, wir haben eine einfache Funktion
auch in der obigen Funktion, wenn (a == null) dasselbe ist wie wenn (! a)
Jetzt, wenn wir diese Funktion aufrufen, ohne den Parameter a zu übergeben
ebenfalls
dies wird undefiniert geben; Wir haben eine Variable deklariert, dieser Variablen jedoch keinen Wert zugewiesen. aber wenn wir schreiben
also ist null ein Objekt. In gewisser Weise haben wir 'a' den Wert null zugewiesen.
quelle
Für den
undefined
Typ gibt es nur einen Wert :undefined
.Für den
null
Typ gibt es nur einen Wert :null
.Für beide ist das Etikett sowohl der Typ als auch der Wert.
Der Unterschied zwischen ihnen. Zum Beispiel:
null
ist ein leerer Wertundefined
ist ein fehlender WertOder:
undefined
hat noch keinen Wert gehabtnull
hatte einen Wert und tut es nicht mehrEigentlich
null
ist ein spezielles Schlüsselwort , nicht um einen Bezeichner. Daher können Sie es nicht als Variable behandeln, der Sie zuweisen möchten.Ist
undefined
jedoch eine Kennung . Sowohl imnon-strict
Modus als auch imstrict
Modus können Sie jedoch eine lokale Variable mit dem Namen undefined erstellen. Aber das ist eine schreckliche Idee!quelle
Wenn Sie eine Variable in Javascript deklarieren, wird ihr der Wert zugewiesen
undefined
. Dies bedeutet, dass die Variable unberührt bleibt und zukünftig einem beliebigen Wert zugewiesen werden kann. Dies bedeutet auch, dass Sie den Wert, den diese Variable zum Zeitpunkt der Deklaration enthalten wird, nicht kennen.Jetzt können Sie explizit eine Variable zuweisen
null
. Dies bedeutet, dass die Variable keinen Wert hat. Zum Beispiel - Einige Leute haben keinen zweiten Vornamen. In einem solchen Fall ist es daher besser, der mittleren Namensvariablen eines Personenobjekts den Wert null zuzuweisen.Angenommen, jemand greift auf die Mittelnamenvariable Ihres Personenobjekts zu und sie hat den Wert
undefined
. Er würde nicht wissen, ob der Entwickler vergessen hat, diese Variable zu initialisieren, oder ob sie keinen Wert hatte. Wenn es den Wert hatnull
, kann der Benutzer leicht schließen, dass der mittlere Name keinen Wert hat und keine unberührte Variable ist.quelle
null und undefiniert werden beide verwendet, um das Fehlen eines Wertes darzustellen.
a wird initialisiert und definiert.
null ist ein Objekt in JavaScript
b ist undefiniert und nicht initialisiert
undefinierte Objekteigenschaften sind ebenfalls undefiniert. Zum Beispiel ist "x" für Objekt c nicht definiert. Wenn Sie versuchen, auf cx zuzugreifen, wird undefiniert zurückgegeben.
Im Allgemeinen weisen wir Variablen, die nicht undefiniert sind, null zu.
quelle
Object.prototype.toString.call(null); // "[object Null]"
Per Ryan Morrs ausführlicher Artikel zu diesem Thema ...
"Wenn Sie einer Variablen oder Eigenschaft einen Nichtwert zuweisen, ihn an eine Funktion übergeben oder von einer Funktion zurückgeben müssen, ist null im Allgemeinen fast immer die beste Option. Einfach ausgedrückt verwendet JavaScript undefiniert und Programmierer sollten dies tun." benutze null. "
Siehe Erkundung des ewigen Abgrunds von Null und Undefiniert
quelle
Referenz: http://www.thesstech.com/javascript/null-and-undefined
quelle
OK, so können wir verwirrt, wenn wir hören ,
null
undundefined
, aber wir beginnen , es einfach, sie sind beide falsy und in vielerlei Hinsicht ähnlich, aber seltsame Teil JavaScript, sie machen ein paar wesentliche Unterschiede zum Beispiel typeofnull
ist'object'
während typeofundefined
ist'undefined'
.Wenn Sie
==
sie jedoch wie folgt überprüfen , sehen Sie, dass beide falsch sind :Sie können auch
null
eine Objekteigenschaft oder ein Grundelement zuweisen , währendundefined
dies einfach erreicht werden kann, indem Sie nichts zuweisen.Ich erstelle ein schnelles Bild, um Ihnen die Unterschiede auf einen Blick zu zeigen.
quelle
Da typeof undefined zurückgibt, ist undefined ein Typ, bei dem null als Initialisierer angibt, dass die Variablen auf kein Objekt verweisen (praktisch alles in Javascript ist ein Objekt).
quelle
In Javascript werden alle Variablen als Schlüsselwertpaare gespeichert. Jede Variable wird als Variablenname gespeichert : Variablenwert / Referenz .
nicht definiert bedeutet, dass einer Variablen ein Leerzeichen im Speicher zugewiesen wurde, ihr jedoch kein Wert zugewiesen wurde. Als bewährte Methode sollten Sie diesen Typ nicht als Zuweisung verwenden.
Wie kann in diesem Fall angegeben werden, wann eine Variable zu einem späteren Zeitpunkt im Code wertlos sein soll? Sie können den Typ null verwenden , bei dem es sich auch um einen Typ handelt, mit dem dasselbe definiert wird, wenn kein Wert vorhanden ist, der jedoch nicht mit undefiniert identisch ist, da Sie in diesem Fall den Wert tatsächlich im Speicher haben. Dieser Wert ist null
Beide sind ähnlich, aber Verwendung und Bedeutung sind unterschiedlich.
quelle
Ich möchte einen sehr subtilen Unterschied zwischen
null
und hinzufügen,undefined
der gut zu wissen ist, wenn Sie versuchen, Vanilla JavaScript (JS) von Grund auf zu lernen:null
ist ein reserviertes Schlüsselwort in JS, währendundefined
es sich um eine Variable für das globale Objekt der Laufzeitumgebung handelt, in der Sie sich befinden.Beim Schreiben von Code ist dieser Unterschied nicht als beides erkennbar
null
undundefined
wird immer in RHS einer JavaScript-Anweisung verwendet. Wenn Sie sie jedoch in LHS eines Ausdrucks verwenden, können Sie diesen Unterschied leicht beobachten. Der JS-Interpreter interpretiert den folgenden Code als Fehler:Es gibt unten Fehler:
Während der folgende Code erfolgreich ausgeführt wird, obwohl ich dies im wirklichen Leben nicht empfehlen werde:
Dies funktioniert, weil
undefined
es sich um eine Variable für das globale Objekt handelt (Browserfensterobjekt bei clientseitigem JS).quelle
undefined='bar'
weist keinen Wert zuundefined
(der unveränderlich ist), wirft nur keinen verwirrenden Fehler.Der Unterschied zwischen
undefined
undnull
ist minimal, aber es gibt einen Unterschied. Eine Variable mit dem Wertundefined
wurde nie initialisiert. Eine Variable, deren Wertnull
explizit angegeben ist, hat den Wert vonnull
. Dies bedeutet, dass die Variable explizit so festgelegt wurde, dass sie keinen Wert hat. Wenn Sie vergleichenundefined
undnull
dennull==undefined
Ausdruck verwenden, sind sie gleich.quelle
null==undefined
liegttrue
nur am impliziten Casting (oder dem entsprechenden Begriff in JS). Diesnull===undefined
liegt offensichtlich daran,false
dass die Verwendung bei der Verwendung auch===
den Typ vergleicht .Grundsätzlich ist Undefined eine globale Variable, die Javascript zur Laufzeit erstellt, unabhängig davon, ob der Variablen null zugewiesen wurde (tatsächlich ist null selbst ein Objekt).
Nehmen wir ein Beispiel:
Undefiniert erhalten Sie diese Ausgabe.
Jetzt,
und Sie erhalten 5 als Ausgabe. Das ist der Hauptunterschied zwischen Undefiniert und Null
quelle
null - Dies ist ein Zuweisungswert, der mit einer Variablen verwendet wird, um keinen Wert darzustellen (es ist ein Objekt).
undefiniert - Dies ist eine Variable, der kein Wert zugewiesen ist, daher weist JavaScript ihr einen undefinierten Wert zu (es ist ein Datentyp).
nicht deklariert - Wenn eine Variable überhaupt nicht erstellt wird, wird sie als nicht deklariert bezeichnet.
quelle
Überprüfen Sie dies heraus. Die Ausgabe sagt mehr als tausend Worte.
Siehe auch:
Prost!
quelle
isNaN(null)
zurückkehrtfalse
- was mich überrascht hat.Beide Sonderwerte implizieren einen leeren Zustand.
Der Hauptunterschied besteht darin, dass undefined den Wert einer Variablen darstellt, die noch nicht initialisiert wurde, während null das absichtliche Fehlen eines Objekts darstellt.
In anderen Fällen wissen Sie, dass eine Variable erwartet, ein Objekt oder eine Funktion zu halten, um ein Objekt zurückzugeben. Aus irgendeinem Grund können Sie das Objekt jedoch nicht instanziieren. In einem solchen Fall ist null ein aussagekräftiger Indikator für ein fehlendes Objekt.
Zum Beispiel ist clone () eine Funktion, die ein einfaches JavaScript-Objekt klont. Es wird erwartet, dass die Funktion ein Objekt zurückgibt:
Clone () kann jedoch mit einem Nicht-Objekt-Argument aufgerufen werden: 15 oder null (oder im Allgemeinen einem primitiven Wert, null oder undefiniert). In diesem Fall kann die Funktion keinen Klon erstellen und gibt daher null zurück - den Indikator für ein fehlendes Objekt.
quelle
Neben einer anderen Bedeutung gibt es noch andere Unterschiede:
null
aber beiundefined
quelle
Wenn eine Variable nicht initialisiert ist, ist sie undefiniert. undefined ist kein Objekt. Beispiel: var MyName; console.log (Typ von MyName);
Überprüfen Sie das Entwicklungstool für die Konsolenanmeldung. Es wird als undefiniert gedruckt.
null ist ein Objekt. Wenn eine Variable null sein soll, wird null verwendet. Es gibt keine Variable, aber der Wert ist nicht bekannt. Sie sollte einer Variablen programmatisch zugewiesen werden. null wird nicht automatisch initialisiert.
Beispiel: var MyName = null; console.log (Typ von MyName); Überprüfen Sie das csole-Protokoll im Entwicklungstool, es wird ein Objekt sein.
quelle