🤡 10 fois où JavaScript te trolle

🤡 10 fois où JavaScript te trolle

Le code est correct. Le résultat est faux. JavaScript te regarde… et sourit.

Quand on écrit du JavaScript, on a parfois cette impression :

« J’apprends ce langage…
mais on dirait que c’est le langage qui essaie de m’analyser. »

La raison est claire :
la coercition de types, les comparaisons par référence et l’attitude
“je sais mieux que toi” de JavaScript.

Dévoilons tout ça, point par point.


1️⃣ "5" + 1 → "51"

« Je voulais une addition, il s’est mis à discuter. »

"5" + 1
// "51"

Que s’est-il passé ?

L’opérateur + a deux personnalités :

  • Il voit des nombres → il fait des maths
  • Il voit une chaîne → il concatène des chaînes

JavaScript s’est dit :

« L’un est une string… très bien, tout le monde devient une string. »

String(1) → "1"
"5" + "1" → "51"

📌 Astuce :

Number("5") + 1 // 6

Leçon :
+ n’est pas fiable.
Si tu veux faire des maths, c’est toi qui choisis le type.


2️⃣ "5" - 1 → 4

« C’était une string il y a une seconde… maintenant il fait des maths ? »

"5" - 1
// 4

Pourquoi ce comportement différent ?

  • L’opérateur - ne comprend pas les strings
  • Il les force à devenir des nombres
Number("5") - 1 // 4

📌 Résumé de la personnalité JavaScript :

  • + → indécis
  • - * / → mathématicien

3️⃣ [] == false → true

« À ce stade, JavaScript me fait passer un examen. »

[] == false
// true

Catastrophe étape par étape :

[]        → ""
""        → 0
false     → 0
0 == 0    → true

📌 Réalité :
== ne compare pas vraiment les valeurs —
il essaie d’abord de rendre tout le monde semblable.

❌ À ne pas faire :

if (value == false)

✅ À faire :

if (value === false)


4️⃣ [] == ![] → true

« Là, ça devient personnel. »

[] == ![]
// true

Ce qui s’est passé :

![]      → false
[]       → ""
""       → 0
false    → 0

Résultat :

0 == 0 // true

📌 Leçon :
! + == + array = chaos


5️⃣ [1,2] == "1,2" → true

« C’est un tableau ou une chaîne ? Personne ne sait. »

[1,2] == "1,2"
// true

Pourquoi ?

[1,2].toString() // "1,2"

Puis :

"1,2" == "1,2"

📌 Règle d’or :
Ne compare jamais des tableaux avec ==.
Ton cœur en souffrira.


6️⃣ NaN === NaN → false

« Même pas égal à lui-même. »

NaN === NaN
// false

Parce que :

  • NaN signifie Not a Number
  • Il représente un résultat indéfini
  • Les choses indéfinies ne se comparent pas

📌 Bon test :

Number.isNaN(value)

❌ À éviter :

value === NaN


7️⃣ typeof NaN → "number"

« C’est là que l’acceptation commence. »

typeof NaN
// "number"

JavaScript dit :

« Oui, ce n’est pas vraiment un nombre…
mais ça appartient quand même à la catégorie des nombres. »

📌 Fait :
C’est l’un des plus vieux bugs de JavaScript
et aujourd’hui, on appelle ça une “feature”.


8️⃣ null == undefined → true

« Séparés, mais traités pareil. »

null == undefined
// true

Mais :

null === undefined
// false

Explication :

  • == → « Ils sont tous les deux plus ou moins rien »
  • === → « Mais ce ne sont PAS la même chose »

📌 Vérification pratique :

value == null
// attrape à la fois null et undefined

(Utile si c’est utilisé consciemment.)


9️⃣ 0.1 + 0.2 !== 0.3

« Même les maths de base sont compliquées ? »

0.1 + 0.2
// 0.30000000000000004

Raison :

  • La précision des nombres flottants
  • Le système binaire

📌 Solutions :

Math.round((0.1 + 0.2) * 100) / 100

ou :

+(0.1 + 0.2).toFixed(2)


🔟 [] === [] → false

« Les mêmes… mais pas vraiment. »

[] === []
// false

Pourquoi ?

  • Les tableaux et objets sont comparés par référence, pas par valeur
let a = [];
let b = a;

a === b // true

📌 Leçon :
Pour les objets,
« même contenu » ≠ « même chose »


🧠 Vérité Finale (À Sauvegarder)

JavaScript ne te trolle pas.
Ses règles sont simplement bien cachées.

Guide de survie :

✅ Utilise ===
❌ Évite ==
🧠 Fais toi-même les conversions de types
🤡 Quand ça devient bizarre, ne dis pas
« je suis nul » — accuse JavaScript d’abord. 😄

Comments

No comments yet. Why don’t you start the discussion?

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir