Hallo,
da »ECMA 262«-konforme implementationen allesamt
schwach und dynamisch typisiert kann ein »typeof«-operator nur die primitiven
typen [undefined], [string], [boolean] und [number] von funktionen, objekten
und eben dem [null]-zeiger unterscheiden.
Von null ja gerade nicht, sonst würde nicht 'object' rauskommen.
da [null] als definierter *NICHT-TYP* die abwesenheit aller anderen typen voraussetzt [...]
Definierter *NICHT-TYP*? Wo hast du denn das her? Außer den von dir genannten [undefined], [string], [boolean], [number] sowie Funktionen und Objekten gibt es auch noch null und NaN. Wieso sollte gerade null ein definierter NICHT-TYP sein? Gilt das auch für NaN (da würde ich es noch eher akzeptieren)?
... wankelmuetige kleingeister das alles ;-)
*LOL*
Der ganze Rest von JavaScript kennt kein Null-Objekt.
richtig, und dass hat auch niemand behauptet, auch nicht der »typeof«-operator.
Doch, in diesem Thread wurde das behauptet, gerade deshalb ist er überhaupt so langhandhabig geworden.
nocheinmal ... das *type* in »typeof« steht in JavaScript NICHT fuer den
"datentyp" einer wie auch immer gearteten objektinstanz. es wird nur nach
primitiven typen und objekten unterschieden. und da [[Function]] eine
sonderstellung[*1] einnimmt, wird eben noch zwischen [function] und [object]
differenziert.
Ja doch. Ihr wollt mir hier immer erklären, wie typeof in JavaScript fuktioniert, als ob ich das nicht wüsste. Ich will euch dagegen erklären, wie typeof in JavaScript funktionieren *sollte*, damit man sinnvollere Ergebnisse erhält, als es der Fall ist.
nein - die namenswahl des operators ist zugegebenermassen ungluecklich, weil
so oft missverstanden; ersteres (das ergebnis) hingegen ist wohlueberlegt.
Jetzt ist es also die Namenswahl, naja. Man hätte das Ding besser "guesstype" getauft, stimmts?
[[Array]]-instanzen sind schlussendlich objekte.
Klar doch, aber wen interessiert denn das? Wie für Funktionen wäre hier eine Extrawurst sinnvoll gewesen, Inkonsequenz hin oder her.
wie z.b. sollte »typeof« folgendes dilemma loesen:
[...]
alert(coll instanceof Collection); // [true]
alert(coll instanceof Array); // [true]
alert(coll instanceof Object); // [true]alert(typeof coll); // "object"
alert(coll.constructor); // [[Array]]: (function Array () {[native code]})[/code]
Ist doch klar: typeof sollte 'array' zurückgeben. Dass es ein Objekt ist, interessiert nicht wirklich, und dass das Array als "Collection"- Objekt konstruiert wurde, auch nicht. Wichtig ist nur, dass es eine Array-Natur hat, mit den entsprechenden Eigenschaften und Methoden.
Dass typeof null === 'object' gilt, ist jedenfalls kompletter Unsinn.
siehe oben.
Genau: siehe oben.
Wenn man schon einen typeof Operator in einer ansonsten schier typlosen Sprache
etabliert, dann sollte der doch auch sinnvolle Ergebnisse liefern, meine ich.http://www.pseliger.de/jsExtendedApi/jsApi.Object.typeDetection.js
http://www.pseliger.de/jsExtendedApi/jsApi.Object.typeDetection.new.dev.js
Hey, super Links! Vielen Dank, sowas hab' ich gesucht :-) Wenn auch auf den ersten Blick etwas zu viel des Guten. Soo schlecht ist typeof ja auch wieder nicht, man muss nur für null und für Arrays, vielleicht auch noch für RegExp-Objekte das Ergebnis ein bisschen zurechtbiegen.
Gruß, Don P