molily: Schneller Check, ob array und/oder HTMLCollection/NodeList/Args

Beitrag lesen

Hallo,

// array-like lists and strings
else if (obj.length === +obj.length) {
// handle strings before collections -> in-operator throws error on strings!
if (typeof obj === 'string') { return 'string'; }
if (obj.callee) { return 'arguments'; }
if ('item' in obj) { return 'collection'; }
}

Das Problem bei so einer Vorgehensweise im Vergleich zu Duck Typing ist, dass nicht beteiligte und nicht benutzte Eigenschaften abgefragt werden. arguments.callee beispielsweise ist deprecated und der Zugriff darauf im ECMAScript 5 Strict Mode wirft eine Exception.

Ich würde jedem raten, schon jetzt nur noch im Strict Mode zu entwickeln, daher würde ich keine Bibliothek auf einem deprecated Feature aufbauen. Wenn du nirgendwo wirklich die Unterscheidung zwischen »listenartig« und Array, Arguments und NodeList/HTMLCollection brauchst, so würde ich gar nicht erst versuchen, sie zu unterscheiden.

Wenn ich dich richtig verstanden habe, braucht deine Funktion hauptsächlich die Unterscheidung zwischen Boolean, String, »listenartig« und Listen mit Elementen. Das ist müsste robust umsetzbar sein.

Mathias