dedlfix: JavaScript: key "find" in leerem Array existiert

Beitrag lesen

Tach!

Ich habe ein leeres Array, und bevor ich ein Element mit einem String als Key einfüge, überprüfe ich, ob es unter diesem Key schon existiert:

Arrays in Javascript haben immer nur numerische Keys.

var array = [];

if ('bind' in array) ... // false
if ('find' in array) ... // true; WTF?

Damit prüfst du, ob ein Objekt bestimmte Eigenschaften hat. Ein Array ist gleichzeitig auch ein Objekt. Du überprüfst mit in nicht die Keys eines Arrays.

array['bind'] // Ausgabe: undefined
array['find'] // Ausgabe: function find() { [native code] }

bind ist keine Eigenschaft von Array, find hingegen schon.

Komisch: Einfügen eines neuen Elements mit dem Key "find" geht aber, obwohl es schon "existiert":

Damit weist du der Instanz des Array-Objekts eine neue Eigenschaft zu. Das find von vorher war nicht direkt der Objekt-Instanz zugeordnet, sondern es wurde über die Prototype-Chain gefunden.

So, und nun? Wie kann ich die Existenz eines selbst eingefügten Elements anhand des Keys überprüfen, ohne dass Funktionen der Array-Klasse gleichen Namens "dazwischenfunken"?

Da es keine assoziativen Arrays (Key-Value-Sammlungen) in Javascript gibt, solltest du anders an die Sache rangehen. Du kannst statt eines Array ein einfaches Objekt nehmen. Und wenn die Reihenfolge der Elemente eine Rolle spielt, gibt es auch noch Map.

dedlfix.