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