Warum ist null ein Objekt und was ist der Unterschied zwischen null und undefiniert?

866

Warum ist nullein als objectin JavaScript?

Überprüft

if ( object == null )
      Do something

das Gleiche wie

if ( !object )
      Do something

?

Und auch:

Was ist der Unterschied zwischen nullund undefined?

rahul
quelle
6
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.

rauben
quelle
14
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:

alert(typeof(null));      // object
alert(typeof(undefined)); // undefined

alert(null !== undefined) //true
alert(null == undefined)  //true

Überprüfung

object == nullist anders zu überprüfen if ( !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:

alert(Boolean(null)) //false
alert(Boolean(0))    //false
alert(Boolean(""))   //false
Kentaromiura
quelle
@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.

    > var noValueYet;
    > console.log(noValueYet);
    undefined
    
    > function foo(x) { console.log(x) }
    > foo()
    undefined
    
    > var obj = {};
    > console.log(obj.unknownProperty)
    undefined

    Der Zugriff auf unbekannte Variablen führt jedoch zu einer Ausnahme:

    > unknownVariable
    ReferenceError: unknownVariable is not defined
  • null: Wird von Programmierern verwendet, um "kein Wert" anzuzeigen, z. B. als Parameter für eine Funktion.

Untersuchen einer Variablen:

console.log(typeof unknownVariable === "undefined"); // true

var foo;
console.log(typeof foo === "undefined"); // true
console.log(foo === undefined); // true

var bar = null;
console.log(bar === null); // true

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 == null
true
> undefined == null
true

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):

> Boolean(null)
false
> Boolean("")
false
> Boolean(3-3)
false
> Boolean({})
true
> Boolean([])
true
Axel Rauschmayer
quelle
1
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:

 undefined == null
 null == undefined

Weitere Informationen finden Sie unter JavaScript-Unterschied zwischen null und undefiniert .

und mit deiner neuen edit ja

if (object == null)  does mean the same  if(!object)

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

TStamper
quelle
4
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

undefined===undeclared===null===0===""===[]==={}===nothing

Und vielleicht sollten alle Ausnahmen werfen.

Anon
quelle
8
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

if (!x)

null wird als falsch ausgewertet

Chad Grant
quelle
8

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

    console.log(window.document.getElementById("nonExistentElement"));
    //Prints: null
  • JSON-Antworten von einer Ajax-Anfrage


    {
      name: "Bob",
      address: null
    }
  • RegEx.exec .

  • Neue Funktionalität im Wandel. Folgendes gibt null zurück:


        var proto = Object.getPrototypeOf(Object.getPrototypeOf({}));

       // But this returns undefined:

        Object.getOwnPropertyDescriptor({}, "a");

Alle anderen Fälle von Nichtexistenz werden mit undefiniert bezeichnet (wie von @Axel angegeben). Jeder der folgenden Ausdrucke ist "undefiniert":

    var uninitalised;
    console.log(uninitalised);

    var obj = {};
    console.log(obj.nonExistent);

    function missingParam(missing){
        console.log(missing);
    }

    missingParam();

    var arr = [];
    console.log(arr.pop());        

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:

if(value === undefined){
  // stuff
}
Noel Abrahams
quelle
8

Vergleich vieler verschiedener Nullprüfungen in JavaScript:

http://jsfiddle.net/aaronhoffman/DdRHB/5/

// Variables to test
var myNull = null;
var myObject = {};
var myStringEmpty = "";
var myStringWhiteSpace = " ";
var myStringHello = "hello";
var myIntZero = 0;
var myIntOne = 1;
var myBoolTrue = true;
var myBoolFalse = false;
var myUndefined;

...trim...

http://aaron-hoffman.blogspot.com/2013/04/javascript-null-checking-undefined-and.html

JavaScript Null Check Vergleichstabelle

Aaron Hoffman
quelle
1
macht "var myUndefined;" Variable definieren (als bekannte Variable mit unbekanntem Typ)?
Qi Fan
6

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.

Anonym
quelle
5

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 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 .

Laurent Villeneuve
quelle
5

Um die Antwort von Was ist der Unterschied zwischen undefinedundnull , aus JavaScript Definitive Guide 6th Edition, S.41 auf dieser Seite hinzuzufügen :

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.

Unpolarität
quelle
3

nullist ein Objekt. Sein Typ ist null. undefinedist kein Objekt; sein Typ ist undefiniert.

Vikas
quelle
11
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.


quelle
2

Zum Beispiel window.someWeirdPropertyist 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 checking if (o == null)for obeing false.

Piotr Findeisen
quelle
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

Dies ist nützlich, um numerische Standardwerte für Zähler festzulegen. Wie oft haben Sie eine Variable in ihrer Deklaration auf -1 gesetzt?

Tim Scollick
quelle
2

In Javascript null 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

AnonDCX
quelle
2

Schau dir das an:

   <script>
function f(a){
  alert(typeof(a));
  if (a==null) alert('null');
  a?alert(true):alert(false);
}
</script>
                                          //return:
<button onclick="f()">nothing</button>    //undefined    null    false
<button onclick="f(null)">null</button>   //object       null    false
<button onclick="f('')">empty</button>    //string               false
<button onclick="f(0)">zero</button>      //number               false
<button onclick="f(1)">int</button>       //number               true
<button onclick="f('x')">str</button>     //string               true
ZPKSoft
quelle
1

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 instanceof Object; //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 instanceof Object; //true, yay!!!
game.score = 100;

Undefinierter Fall:

var score; //at this point 'score' is undefined
typeof(score); //'undefined'
var score.player = "felix"; //'undefined' is not an object
score instanceof Object; //false, oh I already knew that.
Felix
quelle
1

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."

Mike Robinson
quelle
1
  1. 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.

the_unknown_spirit
quelle