Gli oggetti JavaScript possono essere considerati come raccolte di coppie chiave-valore. Sono simili agli Array associativi in PHP. A differenza degli oggetti nei linguaggi fortemente tipizzati, gli oggetti in JavaScript non hanno forme fisse: le proprietà possono essere aggiunte, eliminate, riordinate, mutate o interrogate dinamicamente in qualsiasi momento. Le chiavi degli oggetti sono sempre stringhe o simboli: anche gli indici di array - che sono canonicamente interi-sono in realtà stringhe nascoste.
Per poter accedere alle proprietà ci sono due tipi di notazione
con punto:
obj.name = "Simon"; const name = obj.name;
Con le parentesi quadre:
obj["name"] = "Simon"; const name = obj["name"]; obj.details.color; // orange obj["details"]["size"]; // 12 const userName = prompt("what is your key?"); obj[userName] = prompt("what is its value?");
Gli oggetti sono sempre riferimenti, quindi, a meno che qualcosa non stia clonadno esplicitamente l'oggetto, le mutazioni in un oggetto sarebbero visibili all'esterno.
const obj = {}; function doSomething(o) { o.x = 1; } doSomething(obj); console.log(obj.x); // 1
Ciò significa anche che due oggetti creati separatamente non saranno mai uguali ( !==),perché sono riferimenti diversi.Se si tengono due riferimenti dello stesso oggetto, la mutazione di uno sarebbe osservabile attraverso l'altro
const me = {}; const stillMe = me; me.x = 1; console.log(stillMe.x);