Les objets en JavaScript : guide complet pour débuter

Quand j’ai commencé à travailler avec JavaScript en 2014, les objets m’ont semblé abstraits. Aujourd’hui, après plus de dix ans de développement full-stack, je peux affirmer que maîtriser les objets est la clé pour écrire du code JavaScript propre et maintenable. Dans ce guide, je vous transmets tout ce que j’aurais aimé savoir dès le départ sur l’object JavaScript.

Dans cet article

  • Un objet JavaScript est une collection de paires clé-valeur qui structure vos données de façon logique
  • Il existe 4 façons de créer un objet : littéral, constructeur, Object.create() et classes ES6
  • L’opérateur typeof renvoie « object » pour les objets, mais aussi pour null et les tableaux
  • L’affichage [object Object] apparaît quand vous convertissez un objet en chaîne sans JSON.stringify()
  • Les méthodes Object.keys(), Object.values() et Object.entries() sont indispensables au quotidien
  • La déstructuration ES6 permet d’extraire des propriétés en une seule ligne de code

C’est quoi un objet en JavaScript ?

Un objet en JavaScript est une structure de données qui regroupe des informations sous forme de paires clé-valeur. Pensez-y comme à une fiche d’identité : chaque champ (nom, prénom, âge) est une clé, et chaque valeur renseignée correspond à la donnée associée.

En JavaScript, presque tout est un objet. Les tableaux, les fonctions, les dates, les expressions régulières : tous héritent du prototype Object. C’est pour cette raison que la documentation MDN sur Object constitue une référence incontournable pour tout développeur.

Voici un exemple simple pour illustrer :

const utilisateur = {
  nom: "Renard",
  prenom: "Thomas",
  age: 34,
  estDeveloppeur: true
};

Dans cet exemple, nom, prenom, age et estDeveloppeur sont les propriétés de l’objet. Chacune contient une valeur de type différent : chaîne de caractères, nombre ou booléen. Si vous débutez en JavaScript, je vous recommande de consulter mon guide pour apprendre JavaScript en 2026 avant de poursuivre.

Les objets se distinguent des types primitifs (string, number, boolean, null, undefined, symbol, bigint) par leur capacité à stocker plusieurs valeurs et à être modifiés après leur création. On dit qu’ils sont mutables, contrairement aux primitifs qui sont immuables.

Créer un objet en JavaScript avec la notation littérale est la méthode la plus courante
Créer un objet en JavaScript avec la notation littérale est la méthode la plus courante

Comment créer un objet en JavaScript ?

JavaScript propose quatre façons principales de créer un objet. Je les utilise toutes selon le contexte, mais la notation littérale reste de loin la plus courante dans mes projets.

1. La notation littérale (recommandée)

C’est la méthode que j’utilise dans 90 % des cas. Elle est concise, lisible et performante :

const produit = {
  nom: "Clavier mécanique",
  prix: 89.99,
  enStock: true,
  categories: ["informatique", "peripheriques"]
};

2. Le constructeur Object()

Cette syntaxe utilise le mot-clé new. Elle est plus verbeuse et rarement utilisée en pratique :

const produit = new Object();
produit.nom = "Clavier mécanique";
produit.prix = 89.99;
produit.enStock = true;

3. Object.create()

Cette méthode permet de créer un objet avec un prototype spécifique. Elle est utile pour l’héritage prototypal :

const animal = {
  type: "inconnu",
  decrire() {
    return `Je suis un ${this.type}`;
  }
};

const chat = Object.create(animal);
chat.type = "chat";
console.log(chat.decrire()); // "Je suis un chat"

4. Les classes ES6

Depuis ES6, JavaScript offre une syntaxe de classe qui simplifie la création d’objets structurés. C’est du sucre syntaxique autour du système prototypal :

class Utilisateur {
  constructor(nom, email) {
    this.nom = nom;
    this.email = email;
  }

  sePresenter() {
    return `Je suis ${this.nom}`;
  }
}

const thomas = new Utilisateur("Thomas", "[email protected]");
console.log(thomas.sePresenter()); // "Je suis Thomas"

Méthode de création Syntaxe Cas d’usage Fréquence d’utilisation
Notation littérale { clé: valeur } Objets simples, configuration, données Très fréquente
Constructeur Object() new Object() Création dynamique (rare) Rare
Object.create() Object.create(proto) Héritage prototypal explicite Occasionnelle
Classes ES6 class Nom { } Objets complexes, POO Fréquente

Propriétés et méthodes d’un objet

Un objet JavaScript contient deux types d’éléments : les propriétés (des données) et les méthodes (des fonctions). Cette distinction est fondamentale pour bien structurer votre code.

Les propriétés

Une propriété est une association entre un nom (clé) et une valeur. La valeur peut être n’importe quel type JavaScript, y compris un autre objet :

const site = {
  nom: "Web City",
  url: "https://web-city.fr",
  articles: 32,
  meta: {
    description: "Blog tech et WordPress",
    auteur: "Thomas Renard"
  }
};

Ici, la propriété meta contient elle-même un objet. On parle d’objet imbriqué (ou nested object). C’est un pattern que j’utilise constamment, notamment pour gérer les configurations de mes projets WordPress.

Les méthodes

Une méthode est simplement une fonction stockée comme propriété d’un objet. Elle permet à l’objet d’effectuer des actions :

const calculatrice = {
  resultat: 0,
  additionner(a, b) {
    this.resultat = a + b;
    return this.resultat;
  },
  reinitialiser() {
    this.resultat = 0;
  }
};

console.log(calculatrice.additionner(5, 3)); // 8
console.log(calculatrice.resultat); // 8

Le mot-clé this fait référence à l’objet lui-même. Attention cependant : dans les fonctions fléchées, this ne pointe pas vers l’objet englobant mais vers le contexte parent. C’est une source de bugs fréquente que je rencontre encore régulièrement en relisant du code.

Accéder aux propriétés d’un objet

JavaScript offre deux syntaxes pour accéder aux propriétés d’un objet, plus une troisième via la déstructuration ES6.

La notation par point

C’est la syntaxe la plus courante et la plus lisible :

const user = { nom: "Thomas", age: 34 };
console.log(user.nom); // "Thomas"
console.log(user.age); // 34

La notation par crochets

Elle est indispensable quand le nom de la propriété est dynamique ou contient des caractères spéciaux :

const user = { "nom complet": "Thomas Renard", age: 34 };
console.log(user["nom complet"]); // "Thomas Renard"

const cle = "age";
console.log(user[cle]); // 34
La console du navigateur permet d'inspecter les propriétés d'un objet JavaScript
La console du navigateur permet d’inspecter les propriétés d’un objet JavaScript

La déstructuration ES6

Cette syntaxe moderne permet d’extraire plusieurs propriétés en une seule ligne. Je l’utilise systématiquement dans mes projets récents :

const produit = { nom: "Écran", prix: 299, stock: 15 };
const { nom, prix } = produit;

console.log(nom);  // "Écran"
console.log(prix); // 299

La déstructuration fonctionne aussi avec les valeurs par défaut et le renommage :

const { nom: nomProduit, tva = 20 } = produit;
console.log(nomProduit); // "Écran"
console.log(tva);        // 20 (valeur par défaut)

Modifier et supprimer des propriétés

Les objets étant mutables, vous pouvez ajouter, modifier ou supprimer des propriétés après la création :

const config = { theme: "dark" };

// Ajouter une propriété
config.langue = "fr";

// Modifier une propriété
config.theme = "light";

// Supprimer une propriété
delete config.theme;

console.log(config); // { langue: "fr" }

Pour vérifier si une propriété existe, utilisez l’opérateur in ou la méthode hasOwnProperty() :

console.log("langue" in config);              // true
console.log(config.hasOwnProperty("langue")); // true

Quel est le type d’un objet en JavaScript ?

L’opérateur typeof renvoie « object » pour les objets JavaScript. Mais attention, ce résultat est trompeur dans certains cas que je vais vous détailler.

console.log(typeof {});        // "object"
console.log(typeof []);        // "object" (un tableau est un objet !)
console.log(typeof null);      // "object" (bug historique de JavaScript)
console.log(typeof function(){}); // "function"

Le fait que typeof null renvoie « object » est un bug connu depuis la première version de JavaScript en 1995, comme l’explique la spécification ECMAScript. Il n’a jamais été corrigé pour des raisons de rétrocompatibilité.

Pour vérifier correctement le type d’une valeur, je recommande ces techniques :

// Vérifier si c'est un tableau
Array.isArray([1, 2, 3]); // true
Array.isArray({});        // false

// Vérifier si c'est un objet "pur"
function estObjet(val) {
  return val !== null && typeof val === "object" && !Array.isArray(val);
}

console.log(estObjet({}));   // true
console.log(estObjet([]));   // false
console.log(estObjet(null)); // false

Dans mes projets, j’utilise cette fonction utilitaire estObjet() dès que je dois valider des données entrantes, par exemple les réponses d’API dans un contexte e-commerce. C’est une habitude qui m’a évité de nombreux bugs en production.

Que veut dire [object Object] ?

Si vous avez déjà vu [object Object] s’afficher dans votre console ou sur votre page, pas de panique. C’est le résultat de la conversion automatique d’un objet en chaîne de caractères.

Quand JavaScript doit convertir un objet en string (par exemple lors d’une concaténation), il appelle la méthode toString() héritée du prototype Object. Par défaut, cette méthode renvoie [object Object] :

const user = { nom: "Thomas" };

console.log("Utilisateur : " + user);
// "Utilisateur : [object Object]"

console.log(user.toString());
// "[object Object]"

Le premier « object » (en minuscule) indique le type général, et le second « Object » (avec majuscule) indique le nom du constructeur. Pour les tableaux, vous obtiendriez [object Array] ; pour les dates, [object Date].

Comment résoudre ce problème ?

Trois solutions selon le contexte :

const user = { nom: "Thomas", age: 34 };

// Solution 1 : JSON.stringify()
console.log(JSON.stringify(user));
// '{"nom":"Thomas","age":34}'

// Solution 2 : JSON.stringify() avec indentation
console.log(JSON.stringify(user, null, 2));
// Affichage formaté sur plusieurs lignes

// Solution 3 : Surcharger toString()
user.toString = function() {
  return `${this.nom} (${this.age} ans)`;
};
console.log("Utilisateur : " + user);
// "Utilisateur : Thomas (34 ans)"

Dans la pratique, JSON.stringify() est la solution que j’utilise le plus souvent pour le débogage. Pour les logs en production, je recommande console.log(user) directement, sans concaténation : la console du navigateur affichera l’objet de manière interactive et navigable.

Les méthodes natives de l’objet Object

JavaScript fournit plusieurs méthodes statiques sur l’objet Object qui sont indispensables au quotidien. Voici celles que j’utilise le plus dans mes projets.

Comprendre la différence entre objets et tableaux est essentiel en JavaScript
Comprendre la différence entre objets et tableaux est essentiel en JavaScript

Object.keys(), Object.values() et Object.entries()

Ces trois méthodes permettent d’itérer sur un objet de différentes façons :

const serveur = {
  host: "localhost",
  port: 3000,
  env: "development"
};

console.log(Object.keys(serveur));
// ["host", "port", "env"]

console.log(Object.values(serveur));
// ["localhost", 3000, "development"]

console.log(Object.entries(serveur));
// [["host", "localhost"], ["port", 3000], ["env", "development"]]

Object.entries() est particulièrement utile avec une boucle for...of et la déstructuration :

for (const [cle, valeur] of Object.entries(serveur)) {
  console.log(`${cle} = ${valeur}`);
}
// host = localhost
// port = 3000
// env = development

Object.assign() et le spread operator

Pour fusionner des objets ou créer des copies superficielles :

const defaut = { theme: "light", langue: "fr", notifications: true };
const preferences = { theme: "dark", notifications: false };

// Avec Object.assign()
const config1 = Object.assign({}, defaut, preferences);

// Avec le spread operator (que je préfère)
const config2 = { ...defaut, ...preferences };

console.log(config2);
// { theme: "dark", langue: "fr", notifications: false }

Attention : ces deux techniques ne réalisent qu’une copie superficielle (shallow copy). Les objets imbriqués restent partagés par référence. Pour une copie profonde, utilisez structuredClone() disponible dans les navigateurs modernes, ou JSON.parse(JSON.stringify(obj)) comme alternative. J’ai souvent utilisé cette technique dans des projets impliquant des timers avec setInterval.

Object.freeze() et Object.seal()

Ces méthodes permettent de protéger un objet contre les modifications :

const constantes = Object.freeze({
  API_URL: "https://api.example.com",
  TIMEOUT: 5000
});

constantes.API_URL = "autre-url"; // Ignoré silencieusement
console.log(constantes.API_URL);  // "https://api.example.com"

const config = Object.seal({
  theme: "dark",
  langue: "fr"
});

config.theme = "light"; // OK, modification autorisée
config.nouveau = "test"; // Ignoré, ajout interdit
delete config.theme;     // Ignoré, suppression interdite

Méthode Retour Usage principal
Object.keys(obj) Array des clés Lister les propriétés d’un objet
Object.values(obj) Array des valeurs Extraire toutes les valeurs
Object.entries(obj) Array de paires [clé, valeur] Itérer sur clés et valeurs
Object.assign(cible, ...sources) Objet cible modifié Fusionner des objets
Object.freeze(obj) Objet gelé Rendre un objet immuable
Object.seal(obj) Objet scellé Empêcher ajout/suppression de propriétés
Object.fromEntries(arr) Nouvel objet Convertir un tableau en objet

Objets et tableaux : quelle différence ?

Cette question revient souvent chez les développeurs débutants, et c’est normal : en JavaScript, les tableaux sont techniquement des objets. Mais leur usage diffère fondamentalement.

Un objet stocke des données identifiées par des clés nommées. Un tableau stocke des données ordonnées, identifiées par des index numériques. Le choix dépend de votre besoin :

// Objet : données nommées, accès par clé
const utilisateur = {
  nom: "Thomas",
  role: "développeur",
  experience: 12
};

// Tableau : liste ordonnée, accès par index
const competences = ["PHP", "JavaScript", "WordPress", "Symfony"];

Dans la pratique, je combine les deux en permanence. Un tableau d’objets est le format de données le plus courant dans les applications web, notamment pour afficher des listes :

const articles = [
  { id: 1, titre: "Guide JavaScript", vues: 1250 },
  { id: 2, titre: "WordPress SEO", vues: 890 },
  { id: 3, titre: "PHP 8 nouveautés", vues: 2100 }
];

// Filtrer les articles populaires
const populaires = articles.filter(a => a.vues > 1000);

// Extraire les titres
const titres = articles.map(a => a.titre);

Ce pattern est omniprésent quand vous travaillez avec des API REST, que ce soit pour un site WordPress avec Divi ou une application e-commerce. Si vous devez gérer des pauses dans vos traitements de données, consultez mon article sur comment faire un sleep en JavaScript.

Bonnes pratiques pour travailler avec les objets

Après plus de dix ans de développement, voici les règles que je m’impose systématiquement quand je manipule des objets JavaScript.

Privilégiez l’immutabilité

Plutôt que de modifier un objet existant, créez-en un nouveau avec les changements souhaités. Cela évite les effets de bord difficiles à déboguer :

// À éviter
function mettreAJour(user) {
  user.dernièreConnexion = new Date();
  return user;
}

// Préférable
function mettreAJour(user) {
  return { ...user, dernièreConnexion: new Date() };
}

Utilisez le chaînage optionnel

L’opérateur ?. (optional chaining) évite les erreurs quand vous accédez à des propriétés imbriquées qui pourraient être undefined :

const reponse = { data: { utilisateur: { nom: "Thomas" } } };

// Sans chaînage optionnel (risque d'erreur)
const nom = reponse.data.utilisateur.nom;

// Avec chaînage optionnel (sécurisé)
const nom = reponse?.data?.utilisateur?.nom ?? "Inconnu";

Nommez vos clés de façon cohérente

Adoptez une convention et tenez-vous-y. En JavaScript, le camelCase est le standard pour les noms de propriétés :

// Bon
const config = {
  nomServeur: "prod-01",
  portEcoute: 8080,
  estActif: true
};

// À éviter : mélange de conventions
const config = {
  nom_serveur: "prod-01",
  "port-ecoute": 8080,
  EstActif: true
};

Validez les objets aux frontières

Quand vous recevez des données externes (API, formulaires, fichiers), validez leur structure avant de les utiliser :

function traiterCommande(commande) {
  if (!commande || typeof commande !== "object") {
    throw new Error("Commande invalide");
  }
  if (!commande.id || !commande.montant) {
    throw new Error("Propriétés manquantes");
  }
  // Traitement sécurisé...
}

Dans un contexte professionnel, notamment en développement freelance, cette rigueur sur la validation fait la différence entre un code robuste et un code fragile. Pour aller plus loin dans l’écosystème JavaScript, la spécification officielle ECMAScript (TC39) détaille chaque comportement du langage.

À retenir

  • Utilisez la notation littérale {} pour créer vos objets dans la majorité des cas
  • Préférez Object.entries() avec for...of pour itérer proprement sur un objet
  • Utilisez JSON.stringify() pour afficher un objet en chaîne de caractères et éviter le piège [object Object]
  • Adoptez le spread operator {...obj} pour fusionner ou copier des objets sans mutation
  • Vérifiez le type avec typeof combiné à Array.isArray() pour distinguer objets, tableaux et null

Questions fréquentes


C’est quoi un objet en JavaScript ?

Un objet en JavaScript est une structure de données qui stocke des informations sous forme de paires clé-valeur. Chaque clé (aussi appelée propriété) est associée à une valeur qui peut être de n’importe quel type : chaîne de caractères, nombre, booléen, tableau ou même un autre objet. Les objets permettent de regrouper des données liées et des fonctions (méthodes) dans une même entité logique.


Comment créer un objet en JavaScript ?

Il existe quatre façons principales de créer un objet en JavaScript. La notation littérale (const obj = { clé: valeur }) est la plus courante. Vous pouvez aussi utiliser le constructeur new Object(), la méthode Object.create() pour spécifier un prototype, ou les classes ES6 avec le mot-clé class pour créer des objets structurés avec un constructeur.


Quel est le type d’un objet en JavaScript ?

L’opérateur typeof renvoie la chaîne « object » pour les objets JavaScript. Attention cependant : typeof renvoie aussi « object » pour les tableaux et pour null (un bug historique du langage). Pour vérifier qu’une valeur est bien un objet et non un tableau ou null, combinez typeof avec Array.isArray() et une vérification contre null.


Que veut dire [object Object] en JavaScript ?

L’affichage [object Object] apparaît quand JavaScript convertit automatiquement un objet en chaîne de caractères, par exemple lors d’une concaténation avec +. C’est le résultat par défaut de la méthode toString(). Pour afficher le contenu réel de l’objet, utilisez JSON.stringify(obj) ou passez l’objet directement à console.log() sans concaténation.


Quelles sont les propriétés d’un objet JavaScript ?

Les propriétés d’un objet JavaScript sont les paires clé-valeur qu’il contient. Vous pouvez les lister avec Object.keys(obj) pour obtenir un tableau des clés, Object.values(obj) pour les valeurs, ou Object.entries(obj) pour les paires complètes. Chaque propriété peut être de n’importe quel type et peut être ajoutée, modifiée ou supprimée dynamiquement après la création de l’objet.


Comment parcourir un objet en JavaScript ?

Plusieurs méthodes permettent de parcourir un objet. La boucle for...in itère sur toutes les propriétés énumérables, y compris celles héritées. Pour n’itérer que sur les propriétés propres, utilisez Object.keys(obj).forEach() ou for (const [clé, valeur] of Object.entries(obj)). Cette dernière syntaxe, combinée à la déstructuration, est la plus lisible et la plus moderne.


Damien Roux
Damien Roux

Ingénieur système et expert hébergement web. Fondateur de web-city.fr, il partage guides pratiques, comparatifs objectifs et outils gratuits pour choisir le bon hébergeur et créer son site WordPress.

Retour en haut