node motor home español engine javascript node.js v8

motor - v8 javascript engine



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

Esta matriz (V8 sigue la columna 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 3rd edition es compatible, pero muchas funciones de la 5ª edición también son compatibles.

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

Estoy comenzando con Node.js y me está costando averiguar qué versión de JavaScript admite el nodo, lo que dificulta saber qué funciones puedo usar. Esto es lo que sé.

  • El nodo usa V8
  • V8 implementa ECMAScript como se especifica en ECMA-262, 3ra edición
  • ECMA-262, 3ª edición es JavaScript 1.5

Dado esto, asumiría que puedo usar el código compatible con JavaScript 1.5 en el nodo. 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 estoy equivocado? ¿Hay algún documento en alguna parte que detalle las características del idioma disponible?


La versión 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 la 5ª edición de ECMA-262, en lugar de la 3ª edición. La 5ª edición es equivalente a Javascript 1.8.5. Ver abajo razones.

Entre el 21 de mayo de 2011 y el 15 de junio de 2011, el sitio web de v8 dejó de incluir a v8 en la implementación de la 3ª edición de ECMA-262 y comenzó a mostrar la quinta 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 /

De acuerdo con el registro de cambios v8, el 15 de junio de 2011 v8 cambió a la versión 3.4.4. Entonces esa versión y más tarde son 5ª edición.

Según el registro de cambios del nodo, v8 3.4.10 estaba en la versión 0.5.1 del nodo, 14 de julio de 2011, por lo que la versión y más tarde son la quinta edición ECMA-26. Sin embargo, esto no significa que las versiones v8 anteriores a la 3.4.10 fueron puramente la 3ª edición, ya que puede haber habido una transición constante de la 3ª a la 5ª a través de muchas versiones de v8.


Parece como si nos hubiéramos reducido a dos estrategias para descubrir qué versión del nodo Javascript utiliza:

Estrategia 1: confíe en lo que dice algún documento en algún lugar, 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 verificar.

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é funciones 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.


Parece que, en algún momento, node.green se creó para rastrear el soporte de características de JavaScript contra diferentes versiones de Nodo.