Какая версия Javascript поддерживается в node.js

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

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

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

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

Ответ 1

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

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

Ответ 2

Версия javascript Node зависит от версии v8, которую использует Node. Node версия 0.5.1 (14 июля 2011 г.) и выше использовать v8 3.4.10 или новее, а также 5-е издание ECMA-262, а не 3-е издание. Пятое издание эквивалентно Javascript 1.8.5. Ниже приведены причины.

В период с 21 мая 2011 года по 15 июня 2011 года веб-сайт v8 прекратил листинг v8 как реализацию третьего издания ECMA-262 и начал показывать пятое издание. 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 списком изменений, v8 3.4.10 был в Node Версия 0.5.1, 14 июля 2011 года, так что версия и позже - 5-е издание ECMA-26. Это не означает, что версии v8 до 3.4.10 были чисто 3-м изданием, хотя, возможно, был устойчивый переход с 3-го на 5-й на многие версии v8.

Ответ 3

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

Ответ 4

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

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

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

Найдите функцию, обозначенную ES6, и "посмотрите, не сработает ли она", примерно так:

[email protected]:~/code$ echo "console.log('blue'.includes('blue'))" > a.js
[email protected]:~/code$ cat a.js 
console.log('blue'.includes('blue'))
[email protected]:~/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
[email protected]:~/code$ babel-node a.js
true

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