gudn tach!
nach vielen jahren muss ich mich mal wieder mit js beschaeftigen und fuehle mich soo doof.
assoziative arrays sind in js wohl objekte (oder umgekehrt, je nach sichtweise). das kann, wenn man hashes/maps von anderen sprachen wie perl oder c++ kennt, zu unerwarteten ergebnissen fuehren.
der code-schnipsel
var some_object = {};
some_object['init'] = true;
if(some_object['constructor']){
destroy_earth();
}
wuerde (wenn die funktion destroy_earth
korrekt implementiert ist), fatale folgen haben.
denn some_object
besitzt als objekt standardmaessig die methode constructor
(sowie weitere methoden wie toString
etc.)
im konkreten fall koennte ich durch explizites abfragen den code wohl retten:
var some_object = {};
some_object['init'] = true;
if(some_object['constructor'] === true){
destroy_earth(); // wird nun nicht mehr aufgerufen
}
oder ich mach's noch expliziter:
var some_object = {};
some_object['init'] = true;
const key = 'constructor';
if(Object.keys(some_object).includes(key)
&& some_object[key] === true){
destroy_earth();
}
aber so richtig sauber sieht mir das noch nicht aus -- geschweige denn elegant.
was waere denn in modernem javascript (und ohne jquery oder andere libs) ein sauberer weg, hashes/maps nutzen zu koennen, sodass ich mir keine gedanken darueber zu machen brauche, ob evtl. bereits eine methode existiert, die den gleichen namen traegt wie ein key eines key-value-pairs?
prost
seth