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


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

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

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

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

4 63

4 ответа:

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

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

версия javascript узла зависит от того, какую версию v8 использует этот узел. Узел версии 0.5.1 (14 июля 2011) и выше использовать v8 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-е издание.

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

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

похоже, что мы были сведены к двум стратегиям, чтобы выяснить, какая версия узла 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

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