Ich fange mit Node.js an und habe Schwierigkeiten herauszufinden, welche JavaScript-Version von Node unterstützt wird, was es schwierig macht, herauszufinden, welche Funktionen ich verwenden kann. Folgendes weiß ich.
- Knoten verwendet V8
- V8 implementiert ECMAScript gemäß ECMA-262, 3. Ausgabe
- ECMA-262, 3. Ausgabe ist JavaScript 1.5
Vor diesem Hintergrund würde ich davon ausgehen, dass ich JavaScript 1.5-kompatiblen Code im Knoten verwenden kann. Es stellt sich jedoch heraus, dass ich das Array.forEach
unter anderem verwenden kann, obwohl es laut MDC erst in Javascript 1.6 - ECMA-262, 5. Ausgabe, verfügbar ist.
Wo gehe ich falsch? Gibt es irgendwo ein Dokument, in dem die verfügbaren Sprachfunktionen aufgeführt sind?
javascript
node.js
v8
Emtrane
quelle
quelle
Antworten:
Diese Matrix (V8 folgt ziemlich genau der WebKit-Spalte) scheint die Frage "Welche Funktionen kann ich verwenden?" Ziemlich gut zu beantworten. Ich kann jedoch keine kanonische Antwort auf "Welche Version von Javascript wird unterstützt?" finden. Soweit ich das beurteilen kann, lautet die beste Antwort: ECMA-262 3rd Edition wird unterstützt, aber viele Funktionen der 5th Edition werden ebenfalls unterstützt.
Es gibt eine gute Erklärung dafür, warum V8 die WebKit- und JavaScriptCore-Funktionen in diesem Thread befolgt .
quelle
Die Node-Javascript-Version hängt davon ab, welche Version von v8 Node verwendet. Die Knotenversion 0.5.1 (14. Juli 2011) und höher verwendet Version 8.4.4.10 oder höher und ist die 5. Ausgabe von ECMA-262 anstelle der 3. Ausgabe. Die 5. Ausgabe entspricht Javascript 1.8.5. Siehe unten Gründe.
Zwischen dem 21. Mai 2011 und dem 15. Juni 2011 wurde auf der v8-Website v8 nicht mehr als Implementierung der 3. Ausgabe von ECMA-262 aufgeführt und die 5. Ausgabe angezeigt. http://web.archive.org/web/20110521053630/http://code.google.com/p/v8/ http://web.archive.org/web/20110615102350/http://code.google. com / p / v8 /
Laut dem v8-Änderungsprotokoll wurde v8 am 15. Juni 2011 auf Version 3.4.4 geändert. Diese Version und höher sind also die 5. Ausgabe.
Laut dem Node Changelog war v8 3.4.10 in Node Version 0.5.1, 14. Juli 2011, so dass diese Version und höher die 5. Ausgabe von ECMA-26 sind. Dies bedeutet jedoch nicht, dass v8-Versionen vor 3.4.10 nur die 3. Ausgabe waren, da es in vielen v8-Versionen möglicherweise einen stetigen Übergang von der 3. zur 5. Version gegeben hat.
quelle
Irgendwann wurde node.green erstellt, um die Unterstützung von JavaScript-Funktionen für verschiedene Node-Versionen zu verfolgen.
quelle
Es scheint, als wären wir auf zwei Strategien reduziert worden, um herauszufinden, welche Version des Javascript-Knotens verwendet wird:
Strategie 1: Vertrauen Sie auf das, was irgendwo in einem Dokument steht, was in vielen Fällen falsch ist. Ich habe die Tabelle nicht gefunden, die die Schlüssel-Wert-Paare angibt, welche Version des Knotens welche Version von ECMAScript unterstützt.
Strategie 2: Erraten und Überprüfen.
Suchen Sie eine von ES6 zitierte Funktion und "sehen Sie, ob sie fehlschlägt".
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
Ich nehme an, das "Babel" hier ist ein Hinweis auf das Tanakh. Welche Funktionen unterstützt unsere Version von Node? Nun, ich weiß nicht, Sie müssen es manuell testen. Dies wird eine riesige MESS. Und schlimmer noch, es scheint absichtlich zu sein.
quelle