Je commence avec Node.js et j'ai du mal à déterminer quelle version de JavaScript est prise en charge par node, ce qui rend difficile la détermination des fonctionnalités que je peux utiliser. Voici ce que je sais.
Compte tenu de cela, je suppose que je peux utiliser du code compatible JavaScript 1.5 dans le nœud. Cependant, il s'avère que je peux utiliser le Array.forEach
, entre autres constructions, même si selon MDC il n'est pas disponible avant Javascript 1.6 - ECMA-262, 5ème édition.
Où vais-je mal? Y a-t-il un document quelque part qui détaille les fonctionnalités linguistiques disponibles?
Cette matrice (V8 suit assez attentivement la colonne WebKit) semble assez bien répondre à la question "quelles fonctionnalités puis-je utiliser?" mais je ne trouve pas de réponse canonique à "quelle version de javascript est prise en charge?" Pour autant que je sache, la meilleure réponse est la suivante: ECMA-262 3e édition est prise en charge, mais de nombreuses fonctionnalités de la 5e édition sont également prises en charge.
Il y a une bonne explication de pourquoi V8 suit les fonctionnalités WebKit et JavaScriptCore sur ce fil .
La version Node javascript dépend de la version de v8 utilisée par Node. Node version 0.5.1 (14 juil 2011) ) et les versions ultérieures utilisent la v8 3.4.10 ou une version ultérieure, et sont la 5e édition ECMA-262, plutôt que la 3e édition. La 5e édition est équivalente à Javascript 1.8.5. Voir les raisons ci-dessous.
Entre le 21 mai 2011 et le 15 juin 2011, le site Web v8 a cessé de répertorier la v8 comme mettant en œuvre la 3e édition de l'ECMA-262 et a commencé à montrer la 5e édition. http://web.archive.org/web/20110521053630/http://code.google.com/p/v8/ http://web.archive.org/web/20110615102350/http : //code.google.com/p/v8/
Selon le changelog v8, le 15 juin 2011, la v8 est passée à la version 3.4.4. Cette version et les versions ultérieures sont donc la 5e édition.
Selon le Node changelog, v8 3.4.10 était dans Node Version 0.5.1, 14 juil 2011, de sorte que la version et les versions ultérieures sont la 5ème édition ECMA- 26. Cela ne signifie pas pour autant que les versions v8 antérieures au 3.4.10 étaient purement de la 3e édition, car il peut y avoir eu une transition régulière de la 3e à la 5e à travers de nombreuses versions v8.
On dirait qu'à un moment donné, node.green a été créé pour suivre la prise en charge des fonctionnalités JavaScript par rapport aux différentes versions de Node.
Il semble que nous ayons été réduits à deux stratégies pour déterminer quelle version du nœud Javascript utilise:
Stratégie 1: faites confiance à ce que dit un document quelque part, ce qui est faux dans de nombreux cas. Je n'ai pas trouvé le tableau qui indique les paires clé-valeur de quelle version de noeud prend en charge quelle version d'ECMAScript.
Stratégie 2: devinez et vérifiez.
Trouvez une fonctionnalité citée par ES6 et "voyez si elle échoue", quelque chose comme ceci:
el@apollo:~/code$ echo "console.log('blue'.includes('blue'))" > a.js
el@apollo:~/code$ cat a.js
console.log('blue'.includes('blue'))
el@apollo:~/code$ node a.js
/home/el/code/javascript/02/a.js:1
ports, require, module, __filename, __dirname) { console.log('blue'.includes('
^
TypeError: undefined is not a function
at Object.<anonymous> (/home/el/code/javascript/02/a.js:1:82)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Function.Module.runMain (module.js:501:10)
at startup (node.js:129:16)
at node.js:814:3
el@apollo:~/code$ babel-node a.js
true
Je suppose que le "babel" ici est une référence au Tanakh. Quelles fonctionnalités notre version de nœud prend-elle en charge? Eh bien, je ne sais pas, vous devrez le tester manuellement. Cela va devenir un MESS géant. Et pire, cela semble être exprès.