Какая версия Javascript поддерживается в node.js - PullRequest
72 голосов
/ 28 февраля 2011

Я начинаю работать с Node.js, и мне трудно понять, какая версия JavaScript поддерживается узлом, что затрудняет поиск возможностей, которые я могу использовать.Вот что я знаю.

  • Узел использует V8
  • V8 реализует ECMAScript, как указано в ECMA-262, 3-е издание
  • ECMA-262, 3-е издание JavaScript 1.5

Учитывая это, я бы предположил, что я могу использовать JavaScript-совместимый код 1.5 в узле.Однако оказывается, что я могу использовать Array.forEach среди других конструкций, хотя согласно MDC он недоступен до Javascript 1.6 - ECMA-262, 5-е издание.

Где я иду не так?Есть ли где-нибудь документ, в котором подробно описаны доступные языковые функции?

Ответы [ 4 ]

33 голосов
/ 28 февраля 2011

Эта матрица (V8 следует за колонкой WebKit довольно близко), кажется, довольно хорошо отвечает на вопрос "какие функции я могу использовать?" но я не могу найти канонический ответ на вопрос "какая версия javascript поддерживается?" Насколько я могу судить, лучший ответ таков: ECMA-262 3-е издание поддерживается, но также поддерживаются многие функции 5-го издания.

Есть хорошее объяснение того, почему V8 следует функциональности WebKit и JavaScriptCore в этой теме .

32 голосов
/ 13 апреля 2012

Версия JavaScript узла зависит от того, какую версию v8 использует узел. Узел версии 0.5.1 (14 июля 2011 г.) и выше используют версию 8 3.4.10 или более позднюю, и являются 5-й версией ECMA-262, а не 3-й версией. 5-е издание эквивалентно Javascript 1.8.5. Смотрите ниже причины.

В период с 21 мая 2011 года по 15 июня 2011 года веб-сайт v8 прекратил перечислять v8 как 3-й выпуск ECMA-262 и начал показывать 5-й выпуск. http://web.archive.org/web/20110521053630/http://code.google.com/p/v8/ http://web.archive.org/web/20110615102350/http://code.google.com/p/v8/

Согласно журналу изменений v8, 15 июня 2011 года версия v8 была изменена на версию 3.4.4. Так что эта версия и позже 5-е издание.

Согласно Node changelog, v8 3.4.10 был в Node версии 0.5.1, 14 июля 2011 года, так что эта версия и более поздние версии 5-го издания ECMA-26. Это не означает, что версии v8 до 3.4.10 были чисто 3-м изданием, поскольку, возможно, произошел устойчивый переход с 3-й на 5-ю версию во многих версиях v8.

14 голосов
/ 08 августа 2016

Похоже, в какой-то момент node.green был создан для отслеживания поддержки функций JavaScript для разных версий Node.

1 голос
/ 22 октября 2015

Кажется, что мы были сокращены до двух стратегий, чтобы выяснить, какая версия узла Javascript используется:

Стратегия 1: доверять тому, что где-то говорится в документе, что неправильново многих случаях.Я не нашел таблицу, которая указывает пары ключ-значение, какая версия узла поддерживает какую версию ECMAScript.

Стратегия 2: Угадай и проверь.

Найдите функцию, цитируемую ES6, и "посмотри, не получится ли", что-то вроде этого:

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

Полагаю, что "вавилон" здесь является ссылкой на Танах.Какие функции поддерживает наша версия узла?Ну, я не знаю, вам придется проверить это вручную.Это собирается стать гигантским MESS.И что еще хуже, это кажется нарочно.

...