30

Uther (./28) :
Oui. C'est tout a fait conforme à la spécification : l'explication

J'ai du mal à comprendre l'intérêt d'avoir ce comportement (même si c'est parfaitement décrit dans la spec). Ok, on n'est pas censé faire ça, mais le problème est qu'on se retrouve avec des résultats qui ne sont absolument pas prévisibles si on n'a pas testé avant.

Avec Python, additionner une liste et un dictionnaire renvoie une erreur, et ça semble logique.
En JS, je sais que ça va donner… quelque chose, mais a priori je n'ai aucune idée du résultat (et je ne suis pas le seul, suffit de lire wtfjs ^^). Et au final, c'est le bon plan pour laisser passer des bugs.
avatar<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

31

J'ai jamais dit que c'était intéressant, bien au contraire. JavaScript est certainement un des pires langages au niveau de la logique du typage et des conversions.

Le truc c'est que le JavaScript, un peu comme le PHP, est un succès par accident. Il n'a juste pas été réfléchi en amont : l'implémentation de base aurait été faite en une dizaine de jour. Ce genre de conversion bizarre devait representer un interet dans un cas particulier. Quand Netscape a decide de l'introduire dans son navigateur, il n'a juste pas pense aux consequences : ça ne devait être qu'un gadget.
Le problème c'est que la compatibilité empeche de corriger ces horreurs. ECMA a du se contenter de normaliser l'existant.
avatar

32

Ce système de conversions a probablement été inspiré par VB, qui a le même genre de comportements bizarres.
avatarMes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

33

Les conversions foireuses c'est un héritage du fait que ce soit un pur langage de script (j'en connais deux: PHP et JavaScript, mais il doit y en avoir d'autres. (NB: VB est pas mal dans son genre, mais ne fait pas aussi "bien"))
Il y a des langages comme Swift, qui ont décidé de bannir toutes les conversions implicites, et c'est sans doute une très bonne idée car cela évite toute ambiguïté, mais on ne peut pas aujourd'hui patcher tous les langages du monde pour faire de même. (En plus de ça, ça marche particulièrement bien avec les langages fortement typés, mais particulièrement mal sur les langages faiblement typés comme JavaScript. Et puis c'est pratique de faire rentrer la valeur '5' dans tous les types qui peuvent la contenir sans avoir à demander une conversion.)

De toutes façons, (j'ai déjà du le dire mais pas comme ça…) JavaScript est un assemblage de petites briquettes, et la forme de chacune d'entre elles dépend de celles de ces voisines, tu ne peux pas en retirer une sans risquer de faire effondrer le reste. Malgré ses défauts initiaux, ça reste aujourd'hui une merveille d’ingénierie, juste du fait que l'ensemble arrive à rester cohérent et prévisible. (Le fait qu'il soit prévisible n'implique pas le fait que ce soit facile pour un humain de prédire ce que fera un code donné)

En l’occurrence, le sous-ensemble du JavaScript qui permet de ne coder qu'avec des symboles non alphanumériques est une conséquence indésirable mais tout aussi inévitable de toutes les autres fonctionnalités tongue
avatarLe scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

34

Kevin: je pense pas que tu puisses atteindre ce niveau d'horreur en VB, surtout avec un one liner ^^