Jaka wersja Javascript jest obsługiwana w node.js

Zaczynam pracę z Node.js i mam trudności dowiedzieć się, która wersja JavaScript jest obsługiwany przez węzeł, co sprawia, że trudno dowiedzieć się, jakie funkcje mogę używać. Oto co wiem.

  • Node uses V8
  • Implementuje ECMAScript, jak określono w ECMA-262, wydanie trzecie
  • ECMA-262, wydanie trzecie to JavaScript 1.5

Biorąc to pod uwagę, zakładam, że mogę używać kodu zgodnego z JavaScript 1.5 W node. Okazuje się jednak, że mogę użyć Array.forEach, wśród innych konstrukcji, mimo że według MDC nie jest on dostępny aż do Javascript 1.6 -- ECMA-262, 5th edition.

Gdzie idę źle? Czy istnieje gdzieś dokument opisujący dostępne funkcje językowe?

Author: rink.attendant.6, 2011-02-28

4 answers

Ta matryca (V8 podąża dość dokładnie za kolumną WebKit) wydaje się całkiem dobrze odpowiadać na pytanie " jakich funkcji mogę użyć?"ale nie mogę znaleźć kanonicznej odpowiedzi na "jaka wersja javascript jest obsługiwana?"O ile mogę powiedzieć, najlepszą odpowiedzią jest to: ECMA-262 3rd edition jest obsługiwana, ale wiele funkcji 5th edition są również obsługiwane.

Jest dobre wyjaśnienie, dlaczego V8 podąża za funkcjonalnością Webkit i JavaScriptCore na w tym wątku.

 30
Author: Benson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-28 07:37:03

Wersja node javascript zależy od wersji v8, której węzeł używa. Node w wersji 0.5.1 (14 Jul 2011) i nowszej używają v8 3.4.10 lub nowszej i są 5.edycją ECMA-262, a nie 3. edycją. 5. edycja jest odpowiednikiem Javascript 1.8.5. Zobacz poniżej powody.

Między 21 maja 2011 a 15 czerwca 2011 strona v8 przestała wymieniać v8 jako implementującą 3. edycję ECMA-262 i zaczęła wyświetlać 5. edycja. http://web.archive.org/web/20110521053630/http://code.google.com/p/v8 / http://web.archive.org/web/20110615102350/http://code.google.com/p/v8/

Zgodnie z V8 changelog, 15 czerwca 2011 v8 zmienił się na wersję 3.4.4. Więc ta wersja i późniejsze są 5. edycją.

Zgodnie z Node changelog, v8 3.4.10 był w wersji węzła 0.5.1, 14 Jul 2011, więc wersja i późniejsze są 5th edition ECMA-26. Nie oznacza to, że wersje v8 przed 3.4.10 były czysto 3rd edition, ponieważ mogło być stałe przejście z 3rd do 5th przez wiele wersji v8.

 30
Author: John Middlemas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-12 20:27:05

Wygląda jak w pewnym momencie węzeł.green został stworzony do śledzenia obsługi funkcji JavaScript w różnych wersjach węzłów.

 8
Author: Nate Whittaker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-08 14:49:24

Wydaje się, że zostaliśmy zredukowani do dwóch strategii, aby dowiedzieć się, która wersja węzła Javascript używa:

Strategia 1: ufaj temu, co mówi jakiś dokument, co w wielu przypadkach jest złe. Nie znalazłem tabeli, która wskazuje pary klucz-wartość, która wersja węzła obsługuje która wersja ECMAScript.

Strategia 2: zgaduj i sprawdź.

Znajdź funkcję cytowaną przez ES6 i "sprawdź, czy się nie powiedzie", coś w rodzaju to:

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

Przypuszczam, że "babel" tutaj jest odniesieniem do Tanakh. Jakie funkcje obsługuje nasza wersja node? Nie wiem, musisz to ręcznie przetestować. To będzie wielki bałagan. A co gorsza, wydaje się to być celowo.

 1
Author: Eric Leschinski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-22 20:09:48