seth: (pseudo-)assoziative arrays in javascript: naming collisions mit methoden

Beitrag lesen

gudn tach!

assoziative arrays sind in js wohl objekte (oder umgekehrt, je nach sichtweise).

Es sind Objekte. Auch Arrays sind Objekte. Sagt zumindest der typeof. Es andersrum zu betrachten ist theoretisch möglich, aber praktisch nicht weiter sinnvoll.

ok. gelegentlich bin ich ueber solche aussagen gestolpert:

"I explain how JavaScript objects are also associative arrays (hashes)." (quelle: Objects as associative arrays, quirksmode.org)

some_object.hasOwnProperty() liefert in dem Fall false.

ok, das heisst, ich muss, wenn ich hashes nutze, tatsaechlich diese zusaetzliche bedingung einbauen?

const some_object = {};
some_object['init'] = true;
const key = 'constructor';
if(some_object.hasOwnProperty(key) && some_object[key] === true){
  destroy_earth();
}

finde ich immer noch nicht huebsch, sondern fehleranfaellig.

ich habe bei meiner weiteren recherche soeben noch Map gefunden. vielleicht ist das besser geeignet. damit waere der obige code wohl:

const some_object = new Map();
some_object.set('init', true);
const key = 'constructor';
if(some_object.get(key)){
  destroy_earth();
}

das sieht sauberer aus.

Übrigens, in modernem Javascript braucht man auch kein var mehr.

ach so, stimmt ja. das heisst jetzt let (und verhaelt sich dann endlich so, wie man's von anderen sprachen bereits kennt), hatte ich sogar gelesen, aber wieder vergessen, danke fuer die erinnerung.

In deinen Beispielen kannst du auch für some_object const verwenden.

ah, das const, bezieht sich nur auf die oberste ebene des objekts und nicht auf die properties, ok. finde ich nicht intuitiv, aber gut zu wissen. hab's jetzt nachgelesen.

prost

seth