2010-09-07 11 views
10

Mögliche Duplizieren:
Null object in javascriptIst NULL ein Objekt in JavaScript?

Hallo, ich habe this thread über null in JavaScript zu lesen, aber ich bin sehr verwirrt über die Identität des null jetzt.

Da bekannt ist, dass typeof(null) wegen the language design error-object bewertet und ECMA besagt, dass null The Null Type ist.

8.2 The Null Type 
    The Null type has exactly one value, called null. 

Warum sagen die Leute immer, dass null ein Objekt?

Jemand sagte, dass null ein Singleton-Objekt ist. Sieht jeder das Null so wie in JavaScript?

+1

@ karim79 Ja, ich habe diesen Thread gelesen und meine Frage als Kommentar zu einigen der Antwort, aber habe keine Antwort, so habe ich es hier angesprochen. Danke – c4il

+1

Sie haben sich mit dem Zitat selbst geantwortet. null (ein Wert, der sich selbst darstellt - gelesen als: "nichts anderes" - und null === null, für alle null) ist der einzige Benutzer des Null-Typs. Die tatsächliche "Objekthaftigkeit" ist, wie Sie betonen, offen für Argumente, aber die Eigenschaften von null machen sie zu einem meist stummen Punkt. –

+0

Ihr Link "Sprachgestaltungsfehler" verweist auf ein Dokument von Douglas Crockford - ich (persönlich) würde nicht vorschlagen, dass Sie alles nehmen, was er wortwörtlich sagt. – Reinsbrain

Antwort

10

Null ist die Abwesenheit eines Objekts. Undefiniert bedeutet, dass es noch nicht zugewiesen wurde und null bedeutet, dass es nichts zugewiesen wurde.

Null ist nicht wirklich ein Singleton-Objekt, da Dereferenzierung einen Fehler verursacht; for (var x in null) wird Ihnen einen Fehler geben. Denken Sie an die Zeiger Tage zurück; null war der Wert, den ein Zeiger hatte, als er nicht auf ein Objekt zeigte.

+1

'für (var x in Null);' wird nicht auf vielen Browsern werfen, obwohl es zumindest wie in der [3. Ausgabe] (http://bclary.com/2004/11/07/#a- 12.6.4) von ECMAScript (die 'ToObject'-Operation wird ausgelöst, wenn der Wert' null 'oder' undefiniert 'ist). Aber das hat sich geändert, jetzt auf [ECMAScript 5] (http://www.ecma262-5.com/ELS5_HTML.htm#Section_12.6.4), wenn der Ausdruck "null" oder "undefiniert" ist, endet die Anweisung einfach (eine normale Erklärung abgeschlossen). – CMS

+1

Schön, ECMA-Spezifikation im HTML-Format. Ich habe lange danach gesucht! :) – c4il

7

Nein, null ist einer der wenigen primitiven Typen (andere sind Zahlen, Strings, Boolesche Werte und undefiniert). Alles andere ist ein Objekt, einschließlich Funktionen, Arrays und regulären Ausdrücken. Zahlen, Strings und Booleans werden oft "Objekt-ähnlich" genannt, weil sie Methoden haben, aber sie sind unveränderlich. Objekte auf der anderen Seite sind veränderbar.

+0

Mutabilität hat nichts damit zu tun, ein Objekt zu sein. Siehe Object.freeze in EcmaScript 5, das die Erstellung von unveränderlichen Objekten ermöglicht. Native Objekte in EcmaScript 3 sind ebenfalls Objekte und können unveränderlich sein. Null ist kein Objekt, weil es auf keine Nachrichten antworten kann - hat keine Eigenschaften oder Methoden. Aus diesem Grund (null instanceof type) ist false für alle Typen. –

+1

@mikesamuel: Entfernte den "beleidigenden" Teil von meiner Antwort :) –

+0

* Object-like * kann der falsche Begriff sein, um zu beschreiben, wie Primitive temporär eingerahmt werden, wenn versucht wird, sie als Objekte zu verwenden. – alex

1

null kann nicht als Objekt betrachtet werden, da es keine Eigenschaften haben kann. Es ist ein Schlüsselwort, das ein Primitiv darstellt, wie true und false.

> true instanceof Object 
false 
> null instanceof Object 
false