Don P: typeof liefert immer string

Beitrag lesen

Hallo,

NaN ist ein Wert vom Typ Number (es gibt viele andere Werte vom Typ Number),
false ist ein Wert vom Typ Boolean (es gibt noch einen anderen Werte vom Typ Boolean),
null ist ein Wert vom Typ Null (es gibt nur diesen Wert des Types Null).

Meinetwegen auch vom Typ Null, aber eben kein Objekt, obwohl typeof das behauptet. Darum geht es ja hier. Trotzdem Danke für die Links.

null ist wie gesagt vom Typ Null, für typeof gelten einfach Sonderregeln.

Genau die Sonderregel für null ist es, die ich hier anprangere. Ich weiß, dass es in der ECMAscript-Spezifikation so festgelegt ist, und dennoch ist es ein Fehler, was inzwischen allgemein anerkannt ist. Man hat damals einfach nicht richtig aufgepasst, und nun ist es eben so. Das macht null aber trotzdem nicht zu einem Objekt, nur weil typeof hier falsch spezifiziert ist. Der ganze Rest von JavaScript kennt kein Null-Objekt.

Mit welcher Begründung sollte typeof jetzt plötzlich bei Arrays ... was anderes als "object" zurückliefern.
(...) Es gibt aber kein primitives Array, sondern die sind immer Objekte, leider. typeof sollte hier IMHO trotzdem 'array' sagen.

Eine Begründung sehe ich da nicht, ich kann mich nur Svens Ausführungen anschließen: typeof ist was anderes als constructor oder instanceof.

Zugegeben, das Ergebnis von "typeof []" ist Geschmacksache. Es wäre m.E. eben sinnvoll, wenn 'array' herauskäme. Wegen typeof "" === 'string', typeof 0 === 'number', typeof false === 'boolean' usw. wäre es einfach schön, wenn auch typeof [] === 'array' gelten würde.
Dass typeof null === 'object' gilt, ist jedenfalls kompletter Unsinn.

Klar kann ich für Arrays auch constructor oder instanceof bemühen, aber muss das denn unbedingt sein? Wenn ich ein Array habe, dann interessiert es mich nicht wirklich, dass es auch ein Objekt ist, zumal ja fast alles in JavaScript Objekte sind. Ein Array ist aber schon nochmal etwas besonderes, in allen anderen Programmiersprachen ist das bekanntlich ein eigener, nicht unwichtiger Datentyp. Wenn man schon einen typeof Operator in einer ansonsten schier typlosen Sprache etabliert, dann sollte der doch auch sinnvolle Ergebnisse liefern, meine ich.

Gruß, Don P