08
Objects Avancés
Prototypes, Descriptors & Deep Clone
Les objets sont au cœur de JavaScript. Tout (sauf primitifs) est un objet : arrays, fonctions, dates...
🔧 Méthodes Object Essentielles
Object.keys()
const obj = {a: 1, b: 2};
Object.keys(obj);
// ["a", "b"]
// Utile pour itérer
Object.keys(obj).forEach(key => {
console.log(key, obj[key]);
});
Object.values()
const obj = {a: 1, b: 2};
Object.values(obj);
// [1, 2]
// Somme des valeurs
const sum = Object.values(obj)
.reduce((a, b) => a + b);
Object.entries()
const obj = {a: 1, b: 2};
Object.entries(obj);
// [["a", 1], ["b", 2]]
// Destructuring
for (const [key, val] of Object.entries(obj)) {
console.log(key, val);
}
Object.assign()
const target = {a: 1};
const source = {b: 2};
Object.assign(target, source);
// target = {a: 1, b: 2}
// ⚠️ Shallow copy
// Préférez spread: {...obj}
Object.freeze()
const obj = {a: 1};
Object.freeze(obj);
obj.a = 2; // ❌ Silencieux (strict: erreur)
obj.b = 3; // ❌ Pas ajouté
// Immutable (shallow)
structuredClone()
const obj = {
a: 1,
nested: {b: 2}
};
const clone = structuredClone(obj);
// ✅ Deep clone natif
// ✅ Gère Date, Map, Set
📦 Destructuring Avancé
// 1. Basique
const {name, age} = user;
// 2. Renommer
const {name: userName, age: userAge} = user;
// 3. Valeur par défaut
const {role = "guest"} = user;
// 4. Nested
const {address: {city}} = user;
// 5. Rest
const {id, ...rest} = user;
// 6. Fonction (paramètres)
function greet({name, age = 18}) {
console.log(`${name} (${age})`);
}
greet({name: "Alice"}); // Alice (18)
⛓️ Prototype Chain
Chaque objet a un lien vers son prototype. C'est le mécanisme d'héritage de JavaScript.
Visualisation de la Chaîne
🎯 user (Instance)
name: "Alice"
age: 25
📦 User.prototype
greet()
toString()
🌍 Object.prototype
hasOwnProperty()
valueOf()
⛔ null
Fin de la chaîne
🔍 Shallow vs Deep Copy
⚠️ Shallow Copy
const original = {
a: 1,
nested: {b: 2}
};
// Spread ou Object.assign
const copy = {...original};
copy.a = 99; // ✅ OK
copy.nested.b = 99; // ❌ Modifie original !
// Seul le 1er niveau est copié
✅ Deep Copy
const original = {
a: 1,
nested: {b: 2}
};
// structuredClone (natif)
const copy = structuredClone(original);
copy.nested.b = 99; // ✅ Original intact
// Copie récursive complète
🔬 Object Explorer
Explorez la structure d'un objet JavaScript.
Entrez un objet JSON et cliquez sur Explorer
Best Practice : Utilisez
structuredClone() pour les deep copies (supporté
depuis 2022). Pour les cas complexes (fonctions, symboles), utilisez une bibliothèque comme Lodash
_.cloneDeep().