02

Types de données

Primitifs vs Références & Coercition

JavaScript possède 8 types de données. Cliquez sur une carte pour voir un exemple.

🔢
Number
🔤
String
Boolean
🕸️
BigInt
👻
Null
Undefined
🔑
Symbol
📦
Object
🧠 Mémoire : Stack vs Heap (La Pile vs Le Tas)

Pour bien comprendre le JavaScript, il faut visualiser comment il stocke les données. On utilise une analogie simple : Le Post-it vs Le Carton de Déménagement.

🥞 Stack (La Pile)

Pour les Primitifs (Number, String...)

  • Analogie : Une pile de Post-its sur votre bureau.
  • Caractéristiques : Rapide, Ordonné, Taille fixe.
  • Vous écrivez la valeur directement dessus.
  • Exemple : let age = 25;

📦 Heap (Le Tas)

Pour les Objets (Object, Array, Function)

  • Analogie : Un entrepôt géant en désordre.
  • Caractéristiques : Plus lent, Non-ordonné, Taille dynamique.
  • Vous avez juste l'adresse de l'étagère sur votre Post-it (Stack).
  • Exemple : let user = { id: 1 };

⚡ Démo Interactive : Copie de variables

let a = 5;
let b = a; // Copie la valeur
let user1 = {name: "Alice"};
let user2 = user1; // Copie l'adresse !
Stack (Vos Post-its)
a 5
b 5
user1 @0x1A4 (adresse)
user2 @0x1A4 (adresse)
Heap (L'Entrepôt)
@0x1A4
{ name: "Alice" }
Stack (Vos Post-its)
age 25
name "Alo"
user @0x1A4 (adresse)
Heap (L'Entrepôt)
@0x1A4
{ name: "Alice", role: "Admin" }
⚠️ Piège classique :

Quand vous copiez un objet (let user2 = user1), vous copiez seulement le Post-it avec l'adresse (@0x1A4).
Les deux variables pointent vers le MÊME carton dans l'entrepôt. Si user2 change le contenu, user1 voit le changement !

🐛 Les Bizarreries du `sizeof` (typeof)

typeof "Hello"      // "string"
typeof 42           // "number"
typeof NaN          // "number" (🤔 Not a Number est un type number...)

typeof undefined    // "undefined"
typeof null         // "object" (🤬 BUG HISTORIQUE, ne sera jamais corrigé)

typeof []           // "object" (Tout est objet en JS)
typeof (() => {})   // "function" (Objet appelable)
🔬 Laboratoire de Types
En attente...
⚡ Coercition Implicite

JS essaie d'être "gentil" et convertit les types automatiquement. Cela crée des monstres.

"5" + 1 ➡️ "51" (Concaténation gagne)
"5" - 1 ➡️ 4 (Math gagne)
[] + [] ➡️ "" (Arrays deviennent strings vides)
true + 1 ➡️ 2 (true devient 1)
Solution : Utilisez toujours === et faites des conversions explicites (Number(), String()).
← Variables Suivant: Opérateurs →