Es wäre toll, wenn die letzte Frage im Titel hinzugefügt würde. Die Antworten hier sind fantastisch, aber der Titel weist möglicherweise nicht darauf hin, dass Sie diese Antwort hier finden
marcos.borunda
6
Null ist kein Objekt in JavaScript! typeof null === 'object'aber das ist ein Fehler! Hier ist ein Link Sehen Sie sich alle Videos an und genießen Sie :)
AdR
1
Ich verwende gerne C / C ++ als axiomatische Wahrheit für eine undefinierte Variable mit NULL-Wert, da sie sehr einfach ist. Sehen Sie dann, wie diese Definitionen mit den Spezifikationen anderer Sprachen verglichen werden.
Samis
Antworten:
1488
(name is undefined)
Sie: Was ist name? (*) JavaScript :name ? Was ist ein name? Ich weiß nicht, wovon du sprichst. Sie haben noch nie zuvor erwähnt name. Sehen Sie eine andere Skriptsprache auf der (Client-) Seite?
name =null;
Sie: Was ist name? JavaScript: Ich weiß es nicht.
Zusamenfassend; undefinedist dort, wo keine Vorstellung von der Sache existiert; Es hat keinen Typ und wurde in diesem Bereich noch nie referenziert. nullHier ist bekannt, dass das Ding existiert, aber es ist nicht bekannt, was der Wert ist.
Eine Sache, an die man sich erinnern sollte, nullist, dass sie konzeptionell nicht mit der einen falseoder anderen identisch ist "", selbst wenn sie nach dem Typgießen gleichgesetzt werden , d. H.
name =false;
Sie: Was ist name? JavaScript: Boolean false.
name ='';
Sie: Was ist name? JavaScript: Leere Zeichenfolge
*: nameIn diesem Zusammenhang ist eine Variable gemeint, die nie definiert wurde. Es kann sich um eine beliebige undefinierte Variable handeln. Der Name ist jedoch eine Eigenschaft nahezu aller HTML-Formularelemente. Es geht weit zurück und wurde lange vor id eingeführt. Dies ist nützlich, da IDs eindeutig sein müssen, Namen jedoch nicht.
In JavaScript ist die leere Zeichenfolge '' jedoch immer noch ein boolescher Wert false.
Andreas Grech
117
Die leere Zeichenfolge ist nicht boolean false, sondern wird im Kontext einer Bedingung als false (y) -Wert (Zwang) interpretiert.
Bryan Matthews
22
Für den zweiten Fall, in dem name = null anstelle von 'Ich weiß nicht', könnte JavaScript antworten: Das Null-Objekt. Ansonsten gefällt mir der Stil der Antwort.
Jean Vincent
16
Anstatt "Ich weiß nicht" würde ich sagen, dass die Antwort für null"nichts" ist. Null ist genau als kein Wert definiert. Nichtig, null, nada. Nichts.
Mikl
50
Ich liebe diesen Antwortstil. Im Allgemeinen ist "Sie haben noch nie etwas erwähnt name" wahr. Das Deklarieren einer Variablen ohne Zuweisen eines Werts ( var somevar;) führt jedoch überraschenderweise immer noch zu undefined.
MC Emperor
142
Der Unterschied kann in diesem Ausschnitt zusammengefasst werden:
@kentaromiura Für uns Javascript-Noobs ... vielleicht nur ich ... was ist diese boolesche (Wert-) Syntax? Casting zu einem Booleschen?
xr280xr
@ xr280xr Ja, es ist Casting. Versuchen Sie String(null), ein anderes Beispiel für Casting zu sehen. Du kannst sogar dumme Sachen machen wie Number(null + 2)... aber du solltest nicht :-). Hervorragende Antwort von Kentaromiura.
Squidbe
Denken Sie daran, typeofist ein Operator. Sie würden den Operanden nicht aus dem gleichen Grund in Klammern setzen, aus dem Sie nicht schreiben würden var sum = 1 +(1);.
Alex
124
nullist kein Objekt , es ist ein primitiver Wert . Beispielsweise können Sie keine Eigenschaften hinzufügen. Manchmal nehmen die Leute fälschlicherweise an, dass es sich um ein Objekt handelt, weil es typeof nullzurückkehrt "object". Aber das ist tatsächlich ein Fehler (der möglicherweise sogar in ECMAScript 6 behoben wurde).
Der Unterschied zwischen nullund undefinedist wie folgt:
undefined: Wird von JavaScript verwendet und bedeutet "kein Wert". Nicht initialisierte Variablen, fehlende Parameter und unbekannte Variablen haben diesen Wert.
In der Regel sollten Sie in JavaScript immer === und niemals == verwenden (== führt alle Arten von Konvertierungen durch , die zu unerwarteten Ergebnissen führen können). Die Prüfung x == nullist ein Randfall, da sie sowohl für nullals auch für undefined:
>null==nulltrue>undefined==nulltrue
Eine übliche Methode, um zu überprüfen, ob eine Variable einen Wert hat, besteht darin, ihn in einen Booleschen Wert zu konvertieren und festzustellen, ob dies der Fall ist true. Diese Konvertierung wird von der ifAnweisung und dem booleschen Operator durchgeführt! ("nicht").
function foo(param){if(param){// ...}}function foo(param){if(! param) param ="abc";}function foo(param){// || returns first operand that can't be converted to false
param = param ||"abc";}
Nachteil dieses Ansatzes: Alle folgenden Werte werden mit bewertet false, daher müssen Sie vorsichtig sein (z. B. können die obigen Überprüfungen nicht zwischen undefinedund unterscheiden 0).
undefined, null
Boolesche Werte: false
Zahlen: +0, -0,NaN
Saiten: ""
Sie können die Konvertierung in Boolesche Werte testen, indem Sie sie Booleanals Funktion verwenden (normalerweise handelt es sich um einen Konstruktor, mit dem verwendet werden soll new):
Warum referenzieren +0und -0separat wenn +0 === -0?
Raynos
6
Wahrscheinlich, weil Sie noch unterscheiden können +0und -0: 1/+0 !== 1/-0.
Neo
1
Diese Antwort verweist auf einen Beitrag, der auf diese Antwort als Quelle verweist
Ricardo Tomasi
Oh, richtig, wie in C, wo nicht initialisierte Variablendeklarationen als undefiniert betrachtet werden (alte Versionen könnten tatsächlich frühere Programmdaten enthalten).
Samis
5
"Aber das ist tatsächlich ein Fehler (der möglicherweise sogar in ECMAScript 6 behoben wurde)" - Quelle?
Gajus
26
Was ist der Unterschied zwischen null und undefiniert?
Eine Eigenschaft, die keine Definition hat, ist undefiniert. null ist ein Objekt. Sein Typ ist Objekt. null ist ein spezieller Wert, der "kein Wert" bedeutet. undefined ist kein Objekt, sein Typ ist undefined.
Sie können eine Variable deklarieren, auf null setzen und das Verhalten ist identisch, außer dass "null" im Vergleich zu "undefiniert" ausgedruckt wird. Sie können sogar eine undefinierte Variable mit null vergleichen oder umgekehrt, und die Bedingung ist wahr:
Sie sollten === verwenden, dann undefiniert! == null: D
olliej
1
Achten Sie
6
! object ist nicht dasselbe wie "object == null" ... Tatsächlich sind sie ganz anders. ! object gibt true zurück, wenn das Objekt 0, eine leere Zeichenfolge, Boolean false, undefined oder null ist.
James
3
Ist null wirklich ein Objekt? Der erste Link, den Sie bereitgestellt haben, prüft null nach typeof, aber typeof (null) wird aufgrund eines Sprachdesignfehlers als 'object' ausgewertet.
c4il
2
nullist kein Objekt. Die typeof null == 'object';Rückgabe von true ist auf einen Fehler zurückzuführen, der in JavaScript nicht behoben werden kann (derzeit, kann sich aber in Zukunft ändern).
Mohamad
21
Erster Teil der Frage:
Warum wird null in JavaScript als Objekt betrachtet?
Es ist ein JavaScript-Designfehler, den sie jetzt nicht beheben können. Es sollte vom Typ null sein, kein Objekt oder überhaupt nicht. Es erfordert eine zusätzliche Überprüfung (manchmal vergessen) bei der Erkennung realer Objekte und ist die Quelle von Fehlern.
Zweiter Teil der Frage:
Überprüft
if (object == null) Do something
das gleiche wie
if (!object) Do something
Die beiden Prüfungen sind immer beide falsch, außer:
Objekt ist undefiniert oder null: beide wahr.
Objekt ist primitiv und 0 ""oder falsch: Überprüfen Sie zuerst false, zweitens true.
Wenn das Objekt nicht eine primitive, aber ein reales Objekt, wie new Number(0), new String(""), oder new Boolean(false), dann sind beide Kontrollen falsch.
Wenn also 'Objekt' als echtes Objekt interpretiert wird, sind beide Prüfungen immer gleich. Wenn Grundelemente zulässig sind, unterscheiden sich die Überprüfungen für 0 ""und false.
In Fällen wie object==nullkönnen die nicht offensichtlichen Ergebnisse eine Fehlerquelle sein. Die Verwendung von ==wird niemals empfohlen, ===stattdessen verwenden.
Dritter Teil der Frage:
Und außerdem:
Was ist der Unterschied zwischen null und undefiniert?
In JavaScript besteht ein Unterschied darin, dass null vom Typ object und undefined vom Typ undefined ist.
In JavaScript null==undefinedist true und wird als gleich angesehen, wenn der Typ ignoriert wird. Warum sie das entschieden haben, aber 0 ""und false sind nicht gleich, weiß ich nicht. Es scheint eine willkürliche Meinung zu sein.
In JavaScript null===undefinedist dies nicht der Fall, da der Typ in identisch sein muss ===.
In Wirklichkeit sind null und undefiniert identisch, da beide Nichtexistenz darstellen. Also mach 0, und ""das auch, und vielleicht die leeren Behälter []und {}. So viele Arten des gleichen Nichts sind ein Rezept für Fehler. Ein Typ oder gar keiner ist besser. Ich würde versuchen, so wenig wie möglich zu verwenden.
'falsch', 'wahr' und '!' sind eine weitere Tüte Würmer, die zum Beispiel vereinfacht werden könnten, if(!x)undif(x) allein ausreichen, Sie brauchen nicht wahr und falsch.
Ein deklarierter var xTyp ist undefiniert, wenn kein Wert angegeben wird. Er sollte jedoch derselbe sein, als ob x niemals deklariert worden wäre. Eine andere Fehlerquelle ist ein leerer Nichts-Container. Also ist es am besten, es zusammen zu deklarieren und zu definieren, wie var x=1.
Die Leute drehen sich im Kreis und versuchen, all diese verschiedenen Arten von Nichts herauszufinden, aber es ist alles nur dasselbe in komplizierten verschiedenen Kleidern. Die Realität ist
Tolle Antwort, aber mit [] geht es etwas zu weit: " In Wirklichkeit sind null und undefiniert identisch ... und vielleicht die leeren Container [] und {}. " Sie könnten mich wahrscheinlich überreden, {} sollten einige sein Geschmack von Null, aber mein Bauch Eindruck ist, dass es nicht sollte. Weniger kontrovers hat ein leeres Array []verständlicherweise eine .push()Funktion , daher gibt es kein gutes Argument dafür, dass [] null ist. $ 0,02.
Ruffin
11
var x =null;
x ist als null definiert
y ist nicht definiert; // weil ich es nicht definiert habe
Natürlich, wenn Sie sich entscheiden, var unitialised = null zu schreiben; oder geben Sie von einer Methode selbst null zurück, dann tritt in anderen Situationen null auf. Das sollte aber ziemlich offensichtlich sein.
Ein dritter Fall ist, wenn Sie auf eine Variable zugreifen möchten, aber nicht einmal wissen, ob sie deklariert wurde. Verwenden Sie in diesem Fall typeof, um einen Referenzfehler zu vermeiden:
if(typeof unknown !=="undefined"){//use unknown}
Überprüfen Sie zusammenfassend, ob Sie null sind, wenn Sie das DOM bearbeiten, mit Ajax arbeiten oder bestimmte ECMAScript 5-Funktionen verwenden. In allen anderen Fällen ist es sicher, mit strikter Gleichheit auf undefiniert zu prüfen:
null und undefined sind beide falsch für die Wertgleichheit (null == undefined): Beide kollabieren zu boolean false. Sie sind nicht dasselbe Objekt (null! == undefiniert).
undefined ist eine Eigenschaft des globalen Objekts ("Fenster" in Browsern), aber ein primitiver Typ und kein Objekt selbst. Dies ist der Standardwert für nicht initialisierte Variablen und Funktionen, die ohne return-Anweisung enden.
null ist eine Instanz von Object. null wird für DOM-Methoden verwendet, die Sammlungsobjekte zurückgeben, um ein leeres Ergebnis anzuzeigen, das einen falschen Wert liefert, ohne einen Fehler anzugeben.
null und undefiniert sind zwei verschiedene Werte. Einer repräsentiert das Fehlen eines Wertes für einen Namen und der andere repräsentiert das Fehlen eines Namens.
Was in einem passiert, ist ifwie folgt für if( o ):
Der Ausdruck in den Klammern o wird ausgewertet, und dann wird der ifWert des Ausdrucks in den Klammern vom Typ erzwungen - in unserem Fall o.
Falsche Werte (die zu false gezwungen werden) in JavaScript sind: '', null, undefined, 0 und false .
Sie können in Betracht ziehen undefined, das Fehlen eines Werts nullauf Systemebene, ein unerwartetes oder fehlerhaftes Fehlen von Wert und das Fehlen eines Werts auf Programmebene, ein normales oder ein erwartetes Fehlen darzustellen. Wenn Sie einen dieser Werte einer Variablen oder Eigenschaft zuweisen oder einen dieser Werte an eine Funktion übergeben müssen, nullist dies fast immer die richtige Wahl.
falsch - beide nullund undefinedsind primitive Werte - typeof null === 'object'ist ein Sprachfehler, weilObject(null) !== null
Christoph
Nein ist nicht. Object () Cast-Arbeit auf diese Weise, siehe ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf - 15.2.2.1 neues Objekt ([Wert]) ... 8. (Der Argumentwert wurde nicht angegeben oder sein Typ war Null oder Undefiniert.) Erstellen Sie ein neues natives ECMAScript-Objekt. Die Eigenschaft [[Prototype]] des neu erstellten Objekts wird auf das Objekt Object Prototype festgelegt. Die Eigenschaft [[Class]] des neu erstellten Objekts wird auf "Object" gesetzt. Das neu erstellte Objekt hat keine Eigenschaft [[Wert]]. Gibt das neu erstellte native Objekt zurück.
Kentaromiura
3
@Christoph: Ich meine, du hast recht. null sollte ein Typ sein, was ich damit meine ist, dass Sie ihn nicht auf diese Weise überprüfen können, weil: alert (new Object ()! == new Object ()); / * true, new istance ist nicht dasselbe istance / alert (Object (null) .constructor == {} .constructor); / true wie in spec / alert (Object (null) .prototype == {} .prototype); / true wie in spec / alert (Nullinstanz des Objekts); / offensichtlich falsch, null bedeutet nicht instanziiert * / Aber im Grunde ist ein Spezifikationsfehler XD siehe: nutzlospickles.com/blog/2006/06/12/… und javascript.crockford.com/remedial.html
kentaromiura
2
Die folgende Funktion zeigt, warum und in der Lage ist, den Unterschied herauszufinden:
function test(){var myObj ={};
console.log(myObj.myProperty);
myObj.myProperty =null;
console.log(myObj.myProperty);}
Wenn Sie anrufen
test();
Du bekommst
nicht definiert
Null
Die ersten console.log(...)Versuche zu bekommen myPropertyaus , myObjwährend es noch nicht definiert ist - so es wird „undefined“ zurück. Nach dem Zuweisen von null gibt der zweite console.log(...)offensichtlich "null" zurück, da er myPropertyexistiert, aber ihm ist der Wert nullzugewiesen.
Um diesen Unterschied abfragen zu können, hat JavaScript nullund undefined: While nullist - genau wie in anderen Sprachen ein Objekt, undefinedkann kein Objekt sein, da keine Instanz (auch keine nullInstanz) verfügbar ist.
Können Sie den Unterschied zwischen den beiden Bedingungen
erläutern
Lesen Sie meine Antwort, er meint, wenn o gleich 0, falsch oder "" ist, ist der Boolesche Wert falsch: var undef, verschiedene = [0, "", null, falsch, undef]; für (var obj in verschiedenen) {alert (! obj); // 4 mal falsch in IE, 5 mal in FF;)}
kentaromiura
2
Das andere lustige an null im Vergleich zu undefiniert ist, dass es inkrementiert werden kann.
x =undefined
x++
y =null
y++
console.log(x)// NaN
console.log(y)// 0
In Javascriptnull ist kein objectTyp, es ist ein primitaveTyp.
Was ist der Unterschied? Undefiniert bezieht sich auf einen Zeiger, der nicht gesetzt wurde.
Null bezieht sich auf den Nullzeiger. Beispielsweise hat etwas manuell eine Variable vom Typ gesetztnull
Aus "Die Prinzipien des objektorientierten Javascript" von Nicholas C. Zakas
Aber warum ein Objekt, wenn der Typ null ist? (Tatsächlich wurde dies von TC39, dem Ausschuss, der JavaScript entwirft und verwaltet, als Fehler anerkannt. Sie könnten argumentieren, dass null ein leerer Objektzeiger ist, wodurch "Objekt" zu einem logischen Rückgabewert wird, aber das ist immer noch verwirrend.)
Zakas, Nicholas C. (07.02.2014). Die Prinzipien von objektorientiertem JavaScript (Kindle Locations 226-227). Keine Stärkepresse. Kindle Edition.
Das gesagt:
var game =null;//typeof(game) is "object"
game.score =100;//null is not an object, what the heck!?
game instanceofObject;//false, so it's not an instance but it's type is object//let's make this primitive variable an object;
game ={};typeof(game);//it is an object
game instanceofObject;//true, yay!!!
game.score =100;
Undefinierter Fall:
var score;//at this point 'score' is undefinedtypeof(score);//'undefined'var score.player ="felix";//'undefined' is not an object
score instanceofObject;//false, oh I already knew that.
Der beste Weg, um über 'null' nachzudenken, besteht darin, sich daran zu erinnern, wie das ähnliche Konzept in Datenbanken verwendet wird, wobei es angibt, dass ein Feld "überhaupt keinen Wert" enthält.
Ja, der Wert des Artikels ist bekannt. es ist 'definiert'. Es wird initialisiert.
Der Wert des Artikels lautet: "Es gibt keinen Wert."
Dies ist eine sehr nützliche Technik zum Schreiben von Programmen, die einfacher zu debuggen sind. Eine 'undefinierte' Variable könnte das Ergebnis eines Fehlers sein ... (woher wissen Sie das?) ... aber wenn die Variable den Wert 'null' enthält, wissen Sie, dass "jemand, irgendwo in diesem Programm, ihn auf gesetzt hat 'null.' "Daher schlage ich vor, dass Sie, wenn Sie den Wert einer Variablen entfernen müssen, nicht" löschen "... auf 'null' setzen. Der alte Wert wird verwaist sein und bald wird Müll gesammelt; Der neue Wert lautet "Es gibt (jetzt) keinen Wert." In beiden Fällen ist der Zustand der Variablen sicher: "Es ist offensichtlich absichtlich so gekommen."
Undefiniert bedeutet, dass eine Variable deklariert wurde, ihr jedoch kein Wert zugewiesen wurde, während Null einer Variablen zugewiesen werden kann, die "kein Wert" darstellt. (Null ist ein Zuweisungsoperator.)
2.Undefined ist ein Typ selbst, während Null ein Objekt ist.
3.Javascript kann jede nicht zugewiesene Variable selbst auf undefiniert initialisieren, aber niemals den Wert einer Variablen auf null setzen. Dies muss programmatisch erfolgen.
typeof null === 'object'
aber das ist ein Fehler! Hier ist ein Link Sehen Sie sich alle Videos an und genießen Sie :)Antworten:
Sie: Was ist
name
? (*)JavaScript :
name
? Was ist einname
? Ich weiß nicht, wovon du sprichst. Sie haben noch nie zuvor erwähntname
. Sehen Sie eine andere Skriptsprache auf der (Client-) Seite?Sie: Was ist
name
?JavaScript: Ich weiß es nicht.
Zusamenfassend;
undefined
ist dort, wo keine Vorstellung von der Sache existiert; Es hat keinen Typ und wurde in diesem Bereich noch nie referenziert.null
Hier ist bekannt, dass das Ding existiert, aber es ist nicht bekannt, was der Wert ist.Eine Sache, an die man sich erinnern sollte,
null
ist, dass sie konzeptionell nicht mit der einenfalse
oder anderen identisch ist""
, selbst wenn sie nach dem Typgießen gleichgesetzt werden , d. H.Sie: Was ist
name
?JavaScript: Boolean false.
Sie: Was ist
name
?JavaScript: Leere Zeichenfolge
*:
name
In diesem Zusammenhang ist eine Variable gemeint, die nie definiert wurde. Es kann sich um eine beliebige undefinierte Variable handeln. Der Name ist jedoch eine Eigenschaft nahezu aller HTML-Formularelemente. Es geht weit zurück und wurde lange vor id eingeführt. Dies ist nützlich, da IDs eindeutig sein müssen, Namen jedoch nicht.quelle
null
"nichts" ist. Null ist genau als kein Wert definiert. Nichtig, null, nada. Nichts.name
" wahr. Das Deklarieren einer Variablen ohne Zuweisen eines Werts (var somevar;
) führt jedoch überraschenderweise immer noch zuundefined
.Der Unterschied kann in diesem Ausschnitt zusammengefasst werden:
Überprüfung
object == null
ist anders zu überprüfenif ( !object )
.Letzteres ist gleich
! Boolean(object)
, weil der unäre!
Operator den richtigen Operanden automatisch in einen Booleschen Wert umwandelt.Da ist dann
Boolean(null)
gleich falsch!false === true
.Wenn Ihr Objekt also nicht null , sondern false oder 0 oder "" ist , wird die Prüfung bestanden, weil:
quelle
String(null)
, ein anderes Beispiel für Casting zu sehen. Du kannst sogar dumme Sachen machen wieNumber(null + 2)
... aber du solltest nicht :-). Hervorragende Antwort von Kentaromiura.typeof
ist ein Operator. Sie würden den Operanden nicht aus dem gleichen Grund in Klammern setzen, aus dem Sie nicht schreiben würdenvar sum = 1 +(1);
.null
ist kein Objekt , es ist ein primitiver Wert . Beispielsweise können Sie keine Eigenschaften hinzufügen. Manchmal nehmen die Leute fälschlicherweise an, dass es sich um ein Objekt handelt, weil estypeof null
zurückkehrt"object"
. Aber das ist tatsächlich ein Fehler (der möglicherweise sogar in ECMAScript 6 behoben wurde).Der Unterschied zwischen
null
undundefined
ist wie folgt:undefined
: Wird von JavaScript verwendet und bedeutet "kein Wert". Nicht initialisierte Variablen, fehlende Parameter und unbekannte Variablen haben diesen Wert.Der Zugriff auf unbekannte Variablen führt jedoch zu einer Ausnahme:
null
: Wird von Programmierern verwendet, um "kein Wert" anzuzeigen, z. B. als Parameter für eine Funktion.Untersuchen einer Variablen:
In der Regel sollten Sie in JavaScript immer === und niemals == verwenden (== führt alle Arten von Konvertierungen durch , die zu unerwarteten Ergebnissen führen können). Die Prüfung
x == null
ist ein Randfall, da sie sowohl fürnull
als auch fürundefined
:Eine übliche Methode, um zu überprüfen, ob eine Variable einen Wert hat, besteht darin, ihn in einen Booleschen Wert zu konvertieren und festzustellen, ob dies der Fall ist
true
. Diese Konvertierung wird von derif
Anweisung und dem booleschen Operator durchgeführt! ("nicht").Nachteil dieses Ansatzes: Alle folgenden Werte werden mit bewertet
false
, daher müssen Sie vorsichtig sein (z. B. können die obigen Überprüfungen nicht zwischenundefined
und unterscheiden0
).undefined
,null
false
+0
,-0
,NaN
""
Sie können die Konvertierung in Boolesche Werte testen, indem Sie sie
Boolean
als Funktion verwenden (normalerweise handelt es sich um einen Konstruktor, mit dem verwendet werden sollnew
):quelle
+0
und-0
separat wenn+0 === -0
?+0
und-0
:1/+0 !== 1/-0
.Eine Eigenschaft, die keine Definition hat, ist undefiniert. null ist ein Objekt. Sein Typ ist Objekt. null ist ein spezieller Wert, der "kein Wert" bedeutet. undefined ist kein Objekt, sein Typ ist undefined.
Sie können eine Variable deklarieren, auf null setzen und das Verhalten ist identisch, außer dass "null" im Vergleich zu "undefiniert" ausgedruckt wird. Sie können sogar eine undefinierte Variable mit null vergleichen oder umgekehrt, und die Bedingung ist wahr:
Weitere Informationen finden Sie unter JavaScript-Unterschied zwischen null und undefiniert .
und mit deiner neuen edit ja
Beim Testen, ob das Objekt falsch ist, erfüllen beide nur die Bedingung beim Testen, ob es falsch ist, nicht jedoch, wenn es wahr ist
Überprüfen Sie hier: Javascript gotcha
quelle
null
ist kein Objekt. Dietypeof null == 'object';
Rückgabe von true ist auf einen Fehler zurückzuführen, der in JavaScript nicht behoben werden kann (derzeit, kann sich aber in Zukunft ändern).Erster Teil der Frage:
Es ist ein JavaScript-Designfehler, den sie jetzt nicht beheben können. Es sollte vom Typ null sein, kein Objekt oder überhaupt nicht. Es erfordert eine zusätzliche Überprüfung (manchmal vergessen) bei der Erkennung realer Objekte und ist die Quelle von Fehlern.
Zweiter Teil der Frage:
Die beiden Prüfungen sind immer beide falsch, außer:
Objekt ist undefiniert oder null: beide wahr.
Objekt ist primitiv und 0
""
oder falsch: Überprüfen Sie zuerst false, zweitens true.Wenn das Objekt nicht eine primitive, aber ein reales Objekt, wie
new Number(0)
,new String("")
, odernew Boolean(false)
, dann sind beide Kontrollen falsch.Wenn also 'Objekt' als echtes Objekt interpretiert wird, sind beide Prüfungen immer gleich. Wenn Grundelemente zulässig sind, unterscheiden sich die Überprüfungen für 0
""
und false.In Fällen wie
object==null
können die nicht offensichtlichen Ergebnisse eine Fehlerquelle sein. Die Verwendung von==
wird niemals empfohlen,===
stattdessen verwenden.Dritter Teil der Frage:
In JavaScript besteht ein Unterschied darin, dass null vom Typ object und undefined vom Typ undefined ist.
In JavaScript
null==undefined
ist true und wird als gleich angesehen, wenn der Typ ignoriert wird. Warum sie das entschieden haben, aber 0""
und false sind nicht gleich, weiß ich nicht. Es scheint eine willkürliche Meinung zu sein.In JavaScript
null===undefined
ist dies nicht der Fall, da der Typ in identisch sein muss===
.In Wirklichkeit sind null und undefiniert identisch, da beide Nichtexistenz darstellen. Also mach 0, und
""
das auch, und vielleicht die leeren Behälter[]
und{}
. So viele Arten des gleichen Nichts sind ein Rezept für Fehler. Ein Typ oder gar keiner ist besser. Ich würde versuchen, so wenig wie möglich zu verwenden.'falsch', 'wahr' und '!' sind eine weitere Tüte Würmer, die zum Beispiel vereinfacht werden könnten,
if(!x)
undif(x)
allein ausreichen, Sie brauchen nicht wahr und falsch.Ein deklarierter
var x
Typ ist undefiniert, wenn kein Wert angegeben wird. Er sollte jedoch derselbe sein, als ob x niemals deklariert worden wäre. Eine andere Fehlerquelle ist ein leerer Nichts-Container. Also ist es am besten, es zusammen zu deklarieren und zu definieren, wievar x=1
.Die Leute drehen sich im Kreis und versuchen, all diese verschiedenen Arten von Nichts herauszufinden, aber es ist alles nur dasselbe in komplizierten verschiedenen Kleidern. Die Realität ist
Und vielleicht sollten alle Ausnahmen werfen.
quelle
[]
verständlicherweise eine.push()
Funktion , daher gibt es kein gutes Argument dafür, dass [] null ist. $ 0,02.x ist als null definiert
y ist nicht definiert; // weil ich es nicht definiert habe
null wird als falsch ausgewertet
quelle
Eine Möglichkeit, null und undefiniert zu verstehen, besteht darin, zu verstehen, wo die einzelnen Vorkommen auftreten.
Erwarten Sie in den folgenden Situationen einen Rückgabewert von Null:
Methoden, die das DOM abfragen
JSON-Antworten von einer Ajax-Anfrage
RegEx.exec .
Neue Funktionalität im Wandel. Folgendes gibt null zurück:
Alle anderen Fälle von Nichtexistenz werden mit undefiniert bezeichnet (wie von @Axel angegeben). Jeder der folgenden Ausdrucke ist "undefiniert":
Natürlich, wenn Sie sich entscheiden, var unitialised = null zu schreiben; oder geben Sie von einer Methode selbst null zurück, dann tritt in anderen Situationen null auf. Das sollte aber ziemlich offensichtlich sein.
Ein dritter Fall ist, wenn Sie auf eine Variable zugreifen möchten, aber nicht einmal wissen, ob sie deklariert wurde. Verwenden Sie in diesem Fall typeof, um einen Referenzfehler zu vermeiden:
Überprüfen Sie zusammenfassend, ob Sie null sind, wenn Sie das DOM bearbeiten, mit Ajax arbeiten oder bestimmte ECMAScript 5-Funktionen verwenden. In allen anderen Fällen ist es sicher, mit strikter Gleichheit auf undefiniert zu prüfen:
quelle
Vergleich vieler verschiedener Nullprüfungen in JavaScript:
http://jsfiddle.net/aaronhoffman/DdRHB/5/
http://aaron-hoffman.blogspot.com/2013/04/javascript-null-checking-undefined-and.html
quelle
null und undefined sind beide falsch für die Wertgleichheit (null == undefined): Beide kollabieren zu boolean false. Sie sind nicht dasselbe Objekt (null! == undefiniert).
undefined ist eine Eigenschaft des globalen Objekts ("Fenster" in Browsern), aber ein primitiver Typ und kein Objekt selbst. Dies ist der Standardwert für nicht initialisierte Variablen und Funktionen, die ohne return-Anweisung enden.
null ist eine Instanz von Object. null wird für DOM-Methoden verwendet, die Sammlungsobjekte zurückgeben, um ein leeres Ergebnis anzuzeigen, das einen falschen Wert liefert, ohne einen Fehler anzugeben.
quelle
Einige Präzisionen:
null und undefiniert sind zwei verschiedene Werte. Einer repräsentiert das Fehlen eines Wertes für einen Namen und der andere repräsentiert das Fehlen eines Namens.
Was in einem passiert, ist
if
wie folgt fürif( o )
:Der Ausdruck in den Klammern o wird ausgewertet, und dann wird der
if
Wert des Ausdrucks in den Klammern vom Typ erzwungen - in unserem Fallo
.Falsche Werte (die zu false gezwungen werden) in JavaScript sind: '', null, undefined, 0 und false .
quelle
Um die Antwort von Was ist der Unterschied zwischen
undefined
undnull
, aus JavaScript Definitive Guide 6th Edition, S.41 auf dieser Seite hinzuzufügen :quelle
null
ist ein Objekt. Sein Typ ist null.undefined
ist kein Objekt; sein Typ ist undefiniert.quelle
null
undundefined
sind primitive Werte -typeof null === 'object'
ist ein Sprachfehler, weilObject(null) !== null
Die folgende Funktion zeigt, warum und in der Lage ist, den Unterschied herauszufinden:
Wenn Sie anrufen
Du bekommst
Die ersten
console.log(...)
Versuche zu bekommenmyProperty
aus ,myObj
während es noch nicht definiert ist - so es wird „undefined“ zurück. Nach dem Zuweisen von null gibt der zweiteconsole.log(...)
offensichtlich "null" zurück, da ermyProperty
existiert, aber ihm ist der Wertnull
zugewiesen.Um diesen Unterschied abfragen zu können, hat JavaScript
null
undundefined
: Whilenull
ist - genau wie in anderen Sprachen ein Objekt,undefined
kann kein Objekt sein, da keine Instanz (auch keinenull
Instanz) verfügbar ist.quelle
Zum Beispiel
window.someWeirdProperty
ist so undefiniert"window.someWeirdProperty === null"
wird währenddessen als falsch ausgewertet"window.someWeirdProperty === undefined"
bewertet als wahr.Außerdem ist checkif
if (!o)
nicht dasselbe wie checkingif (o == null)
foro
beingfalse
.quelle
Das andere lustige an null im Vergleich zu undefiniert ist, dass es inkrementiert werden kann.
Dies ist nützlich, um numerische Standardwerte für Zähler festzulegen. Wie oft haben Sie eine Variable in ihrer Deklaration auf -1 gesetzt?
quelle
In Javascript
null
ist keinobject
Typ, es ist einprimitave
Typ.Was ist der Unterschied? Undefiniert bezieht sich auf einen Zeiger, der nicht gesetzt wurde. Null bezieht sich auf den Nullzeiger. Beispielsweise hat etwas manuell eine Variable vom Typ gesetzt
null
quelle
Schau dir das an:
quelle
Aus "Die Prinzipien des objektorientierten Javascript" von Nicholas C. Zakas
Zakas, Nicholas C. (07.02.2014). Die Prinzipien von objektorientiertem JavaScript (Kindle Locations 226-227). Keine Stärkepresse. Kindle Edition.
Das gesagt:
Undefinierter Fall:
quelle
Der beste Weg, um über 'null' nachzudenken, besteht darin, sich daran zu erinnern, wie das ähnliche Konzept in Datenbanken verwendet wird, wobei es angibt, dass ein Feld "überhaupt keinen Wert" enthält.
Dies ist eine sehr nützliche Technik zum Schreiben von Programmen, die einfacher zu debuggen sind. Eine 'undefinierte' Variable könnte das Ergebnis eines Fehlers sein ... (woher wissen Sie das?) ... aber wenn die Variable den Wert 'null' enthält, wissen Sie, dass "jemand, irgendwo in diesem Programm, ihn auf gesetzt hat 'null.' "Daher schlage ich vor, dass Sie, wenn Sie den Wert einer Variablen entfernen müssen, nicht" löschen "... auf 'null' setzen. Der alte Wert wird verwaist sein und bald wird Müll gesammelt; Der neue Wert lautet "Es gibt (jetzt) keinen Wert." In beiden Fällen ist der Zustand der Variablen sicher: "Es ist offensichtlich absichtlich so gekommen."
quelle
2.Undefined ist ein Typ selbst, während Null ein Objekt ist.
3.Javascript kann jede nicht zugewiesene Variable selbst auf undefiniert initialisieren, aber niemals den Wert einer Variablen auf null setzen. Dies muss programmatisch erfolgen.
quelle