Skip to content

****# 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 :

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

javascript
const title = movie.title // dot syntax

La syntaxe à crochets (bracket syntax)

javascript
const imdbID = movie.imdbId // bracket syntax

Or, en JavaScript, tout est valeur, et toute valeur peut être stockée dans une variable.

javascript
'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 :

javascript
const prop = 'imdbId'
const imdbID = movie[prop]

Modifier une propriété d'un objet

javascript
movie.title = 'Escape From New York'

Ou (fortement déconseillé si le nom de la propriété est connue) :

javascript
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

javascript
movie.brazilianTitle = 'Fuga de Nova York'

Ou (déconseillé, ditto) :

javascript
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 :

javascript
delete movie.title

La syntaxe à crochets est valable ici aussi :

javascript
delete movie.title

Créer un objet avec des noms de propriétés dynamiques

Depuis ES6, on peut écrire ceci :

javascript
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.

javascript
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