****# Les objets en JavaScript
Les initialisateurs d’objets (object initializer)
Voici comment créer un objet de façon la plus commune et la plus simple :
const movie = {
imdbID: 'tt0082340',
title: 'Escape from New York',
frenchTitle: 'New-York 1997',
}
C'est un initialisateur d’objet (object initializer) : il s’agit d’une collection de paires de clé-valeur :
- cette collection est délimitée par des accolades (curly brackets)
- la clé est séparée de la valeur par un caractère deux-points
:
(colon) - chaque paire de clé-valeur est séparée par un caractère virgule
,
(comma)
Par convention, on met souvent chaque paire de clé-valeur sur sa propre ligne, et on ne met pas d’espace avant les deux points, et on en met une après.
Une clé (le nom d’une propriété) peut avoir n’importe quel nom. Si une clé porte un nom qui n’est pas un identifiant valide*, il faut le mettre entre guillemets.
* pour faire vite, pour qu’un identifiant soit valide il ne faut ni espace ni signe de ponctuation ni caractère spécial hormis $
et _
(c’est en réalité un peu plus compliqué)
Les syntaxes pour accéder à la propriété d’un objet
Il existe deux syntaxes différentes pour accéder à la propriété d’un objet
La syntaxe à point (dot syntax)
const title = movie.title // dot syntax
La syntaxe à crochets (bracket syntax)
const imdbID = movie.imdbId // bracket syntax
Or, en JavaScript, tout est valeur, et toute valeur peut être stockée dans une variable.
'imdbId' // une valeur
const propName = 'imdbId' // La variable `propName` contient la valeur 'imdbId'
La syntaxe à crochet permet donc de récupérer la valeur de la propriété dont le nom est dans une variable :
const prop = 'imdbId'
const imdbID = movie[prop]
Modifier une propriété d'un objet
movie.title = 'Escape From New York'
Ou (fortement déconseillé si le nom de la propriété est connue) :
movie.title = 'Escape From New York' // moins lisible, pas de complétion dans les éditeurs
// sujet à erreurs (silencieuses, d’ailleurs), et peu performant
Ajouter une propriété à un objet
movie.brazilianTitle = 'Fuga de Nova York'
Ou (déconseillé, ditto) :
movie.brazilianTitle = 'Fuga de Nova York'
Supprimer une propriété d'un objet
Affecter la valeur undefined
à une propriété n'est pas la même chose que supprimer une propriété : dans le premier cas, la propriété existera toujours sur l'objet.
Pour supprimer la propriété, il existe l'opérateur delete
qui s'utilise comme suit :
delete movie.title
La syntaxe à crochets est valable ici aussi :
delete movie.title
Créer un objet avec des noms de propriétés dynamiques
Depuis ES6, on peut écrire ceci :
const propName = 'foo'
// ...plus tard
const obj = {
[propName]: 'bar'
}
obj // { foo: 'bar' }
Un objet n’est égal qu’à lui-même
Si deux objets sont créés, et qu’ils contiennent les mêmes propriétés avec les mêmes valeurs, ils sont et restent deux valeurs distinctes. Même s’il s’agit d’objets vides.
const one = {}
const two = {}
one === two // false
const sameOne = one // nouveau nom pour la même valeur
sameOne === one // true
sameOne === two // false
const arr1 = []
const arr2 = []
arr1 === arr2 // false
const sameArr1 = arr1
sameArr1 === arr1 // true
sameArr1 === arr2 // false