Object
In JavaScript, Object è uno dei tipi di dato più importanti e potenti. Quasi tutto in JavaScript è un oggetto: array, funzioni, date, regex, persino le classi sono basate su oggetti.
Un oggetto rappresenta una collezione di coppie chiave → valore, dove:
- la chiave (property) è una stringa o un simbolo
- il valore può essere di qualsiasi tipo (primitivo o altro oggetto)
Cos’è un oggetto
const user = {
name: "Marco",
age: 30,
isAdmin: true,
};Qui user è un oggetto con tre proprietà:
name→ stringaage→ numeroisAdmin→ booleano
Creazione di oggetti
Literal notation (più comune)
const car = {
brand: "Fiat",
year: 2020,
};Con new Object()
const car = new Object();
car.brand = "Fiat";
car.year = 2020;Con funzione costruttore
function User(name, age) {
this.name = name;
this.age = age;
}
const u1 = new User("Anna", 25);Con class (syntactic sugar)
class User {
constructor(name, age) {
this.name = name;
this.age = age;
}
}
const u1 = new User("Anna", 25);Accesso alle proprietà
Dot notation
user.name; // "Marco"
user.age; // 30Bracket notation
user["name"]; // "Marco"
const key = "age";
user[key]; // 30La bracket notation è necessaria quando:
- il nome della chiave è dinamico
- la chiave contiene spazi o caratteri speciali
Modifica e aggiunta di proprietà
user.age = 31; // modifica
user.city = "Roma"; // aggiuntaEliminare una proprietà
delete user.city;Verificare se una proprietà esiste
"name" in user; // true
user.hasOwnProperty("age"); // trueMetodi
Un metodo è una funzione salvata come proprietà di un oggetto.
const user = {
name: "Marco",
greet() {
return `Ciao, sono ${this.name}`;
},
};
user.greet(); // "Ciao, sono Marco"this fa riferimento all’oggetto che invoca il metodo.
Oggetti annidati
const company = {
name: "Tech SRL",
address: {
city: "Milano",
zip: "20100",
},
};
company.address.city; // "Milano"Copia di oggetti
Gli oggetti sono passati per riferimento, non per valore.
const a = { x: 1 };
const b = a;
b.x = 2;
a.x; // 2Copia superficiale
const copy = { ...a };oppure
const copy = Object.assign({}, a);Copia profonda (deep copy)
const deep = JSON.parse(JSON.stringify(a));Attenzione: questo metodo non copia funzioni,
undefined,Symbolo riferimenti circolari.
Iterare sulle proprietà
for (const key in user) {
console.log(key, user[key]);
}Metodi utili
Object.keys(user); // ["name", "age", "isAdmin"]
Object.values(user); // ["Marco", 30, true]
Object.entries(user); // [["name","Marco"], ["age",30], ["isAdmin",true]]Confronto tra oggetti
const a = { x: 1 };
const b = { x: 1 };
a === b; // falseGli oggetti sono uguali solo se fanno riferimento alla stessa istanza.
Oggetti come struttura dati
Gli oggetti sono spesso usati come:
- mappe chiave/valore
- strutture dati complesse
- modelli di stato
- rappresentazioni di entità
Esempio:
const users = {
1: { name: "Anna" },
2: { name: "Luca" },
};
users[1].name; // "Anna"Oggetti e prototipi
Ogni oggetto ha un prototipo da cui eredita proprietà e metodi.
const arr = [];
arr.toString(); // metodo ereditato da Array.prototypePuoi accedere al prototipo con:
Object.getPrototypeOf(arr);Oggetto globale
Nel browser:
window;In Node.js:
global;Questi sono oggetti che contengono funzioni e variabili globali.
In sintesi
- Un Object è una struttura chiave → valore.
- Può contenere qualsiasi tipo di dato.
- È passato per riferimento.
- Supporta metodi, annidamento e prototipi.
- È alla base dell’architettura di JavaScript.