??

L’opérateur ?? (nullish coalescing) renvoie le côté droit seulement quand le côté gauche est null ou undefined. Idéal pour les valeurs par défaut.

Renvoie
La valeur de gauche si elle n’est ni null ni undefined, sinon celle de droite.
Sur cette page

Exemple

#
JavaScript
const savedVolume = 0
const savedName = null

console.log(savedVolume ?? 50)
console.log(savedVolume || 50)
console.log(savedName ?? 'Invité')
Console
0
50
Invité

Définition et utilisation

#

L’opérateur ?? vérifie le côté gauche. S’il est null ou undefined, il renvoie le côté droit. Dans tous les autres cas, il renvoie le côté gauche, même si c’est 0, une chaîne vide "" ou false.

C’est là la différence avec ||, qui rejette toutes les valeurs fausses. Pour les nombres et les réglages, c’est important : volume || 50 remplacera un 0 défini intentionnellement par 50, alors que volume ?? 50 laissera le 0.

Le côté droit n’est évalué que s’il est nécessaire. L’opérateur d’affectation ??= ne définit la valeur que si la variable ou la propriété est vide : settings.lang ??= "fr". En combinant ?? avec || ou &&, vous devez ajouter des parenthèses, sinon vous obtenez une erreur de syntaxe.

Syntaxe

#
Syntaxe
leftExpr ?? rightExpr
target ??= value

Plus d’exemples

#
Réglages avec valeurs par défaut
JavaScript
function createGame(options) {
  return {
    lives: options.lives ?? 3,
    hints: options.hints ?? true,
    level: options.level ?? 1
  }
}

console.log(createGame({ lives: 0, hints: false }))
Console
{ lives: 0, hints: false, level: 1 }
Affectation ??=
JavaScript
const profile = { name: 'Lucas', avatar: null }

profile.avatar ??= 'default.png'
profile.name ??= 'Anonyme'

console.log(profile)
Console
{ name: 'Lucas', avatar: 'default.png' }
Parenthèses en combinant avec ||
JavaScript
const nickname = ''
const fallback = null

const label = (nickname || fallback) ?? 'Anonyme'
console.log(label)
Console
Anonyme

L’écriture nickname || fallback ?? "Anonyme" sans parenthèses est une erreur de syntaxe. Les parenthèses montrent clairement ce qui doit s’exécuter en premier.

Compatibilité des navigateurs

#

Largement disponible

Fonctionne dans tous les navigateurs modernes, y compris sur mobile. Vous pouvez l’utiliser sans crainte.

  • Chrome
  • Edge
  • Firefox
  • Safari

Bonnes pratiques

#
  • Pour les nombres, les drapeaux et les réglages où 0, false ou "" sont des valeurs valides, choisissez ?? plutôt que ||.
  • Les valeurs par défaut des paramètres (function fn(x = 5)) et de la déstructuration ne fonctionnent que pour undefined, alors que ?? fonctionne aussi pour null. Choisissez l’outil adapté aux données que vous recevez.

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.