Estoy comenzando con Node.js y estoy teniendo dificultades para averiguar qué versión de JavaScript es compatible con node, lo que dificulta descubrir qué funciones puedo usar. Esto es lo que sé.
- El nodo usa V8
- V8 implementa ECMAScript como se especifica en ECMA-262, tercera edición
- ECMA-262, 3.ª edición es JavaScript 1.5
Dado esto, supongo que puedo usar código compatible con JavaScript 1.5 en node. Sin embargo, resulta que puedo usar Array.forEach
, entre otras construcciones, aunque según MDC no está disponible hasta Javascript 1.6 - ECMA-262, 5ª edición.
¿Dónde me equivoco? ¿Hay algún documento en alguna parte que detalle las funciones de idioma disponibles?
javascript
node.js
v8
emtrane
fuente
fuente
Respuestas:
Esta matriz (V8 sigue la columna de WebKit bastante de cerca) parece responder bastante bien a la pregunta "¿qué funciones 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 3ª edición es compatible, pero muchas características de la 5ª edición también son compatibles.
Hay una buena explicación de por qué V8 sigue la funcionalidad de WebKit y JavaScriptCore en este hilo .
fuente
La versión de JavaScript de Node depende de la versión de v8 que use Node. La versión de nodo 0.5.1 (14 de julio de 2011) y posteriores usan v8 3.4.10 o posterior, y son ECMA-262 de quinta edición, en lugar de la tercera edición. La quinta edición 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 la versión 8 dejó de incluir la versión 8 como implementación de la 3ª edición de ECMA-262 y comenzó a mostrar la 5ª edició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 /
Según el registro de cambios de la v8, el 15 de junio de 2011, la v8 cambió a la versión 3.4.4. Entonces esa versión y posteriores son la 5ª edición.
De acuerdo con el registro de cambios de Node, v8 3.4.10 estaba en la Versión de Nodo 0.5.1, 14 de julio de 2011, por lo que la versión y posteriores son la 5ta edición ECMA-26. Sin embargo, esto no significa que las versiones v8 anteriores a la 3.4.10 fueran puramente la tercera edición, ya que puede haber habido una transición constante de la tercera a la quinta a través de muchas versiones v8.
fuente
Parece que, en algún momento, node.green se creó para rastrear el soporte de funciones de JavaScript en diferentes versiones de Node.
fuente
Parece que nos hemos reducido a dos estrategias para averiguar qué versión del nodo Javascript utiliza:
Estrategia 1: confiar 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 de nodo admite qué versión de ECMAScript.
Estrategia 2: adivinar y comprobar.
Busque una función 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 la "babel" aquí es una referencia al Tanakh. ¿Qué características admite nuestra versión de nodo? Bueno, no sé, tendrás que probarlo manualmente. Esto se convertirá en un MESS gigante. Y lo que es peor, parece ser a propósito.
fuente