Qué versión de Javascript es compatible con node.js


Estoy empezando con Node.js y estoy teniendo dificultades para averiguar qué versión de JavaScript es compatible con node, lo que hace que sea difícil averiguar qué características puedo usar. Esto es lo que sé.

Dado esto, asumiría que puedo usar código compatible con JavaScript 1.5 en node. Sin embargo, resulta que puedo usar el Array.forEach, entre otras construcciones, aunque según MDC no está disponible hasta Javascript 1.6 EC ECMA-262, 5th edition.

¿En qué me estoy equivocando? ¿Hay algún documento en algún lugar que detalle las características del idioma disponibles?

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

4 answers

Esta matriz (V8 sigue la columna de WebKit bastante de cerca) parece responder bastante bien a la pregunta "¿qué características puedo usar?"pero no puedo encontrar una respuesta canónica a" ¿qué versión de javascript es compatible?"Por lo que puedo decir, la mejor respuesta es esta: ECMA-262 3a edición es compatible, pero muchas características de la 5a edición también son compatibles.

Hay una buena explicación de por qué V8 sigue la funcionalidad WebKit y JavaScriptCore en este hilo.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-28 07:37:03

La versión de javascript del nodo depende de la versión de v8 que utilice ese nodo. Node versión 0.5.1 (14 Jul 2011) y superior utilizan v8 3.4.10 o posterior, y son 5th edition ECMA-262, en lugar de 3rd Edition. 5th edition es equivalente a Javascript 1.8.5. Vea las razones a continuación.

Entre el 21 de mayo de 2011 y el 15 de junio de 2011, el sitio web de v8 dejó de enumerar v8 como implementación de la 3a edición ECMA-262 y comenzó a mostrar la 5a versión. http://web.archive.org/web/20110521053630/http://code.google.com/p/v8 / http://web.archive.org/web/20110615102350/http://code.google.com/p/v8 /

De acuerdo con el registro de cambios de v8, el 15 de junio de 2011 v8 cambió a la versión 3.4.4. Así que esa versión y posteriores son la 5a edición.

De acuerdo con el Node changelog, v8 3.4.10 estaba en la versión Node 0.5.1, 14 Jul 2011, por lo que la versión y posteriores son 5th edition ECMA-26. Esto no significa que las versiones v8 anteriores a 3.4.10 fueran puramente 3ª edición, sin embargo, ya que puede haber habido una transición constante de 3 a 5 a través de muchas versiones 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-12 20:27:05

Parece, en algún momento, nodo.green fue creado para rastrear el soporte de funciones JavaScript contra diferentes versiones de nodos.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-08 14:49:24

Parece que nos hemos reducido a dos estrategias para averiguar qué versión del nodo Javascript utiliza:

Estrategia 1: confía en lo que dice algún documento en alguna parte, lo cual es incorrecto en muchos casos. No he encontrado la tabla que indica los pares clave-valor de qué versión del nodo soporta qué versión de ECMAScript.

Estrategia 2: adivina y comprueba.

Encuentre una característica citada por ES6 y "vea si falla", algo como esto:

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

Supongo que el "babel" aquí es una referencia al Tanakh. ¿Qué características admite nuestra versión de node? Bueno, no lo sé, tendrás que probarlo manualmente. Esto se va a convertir en un desastre gigante. Y peor, parece ser a propósito.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-22 20:09:48