Gli oggetti in javascript

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);