Cuando crea un nuevo script de Google Apps, parece admitir el tiempo de ejecución v8 de forma predeterminada. La documentación dice:
Apps Script es compatible con dos tiempos de ejecución de JavaScript: el tiempo de ejecución V8 moderno y uno más antiguo impulsado por el intérprete de JavaScript Rhino de Mozilla.
El tiempo de ejecución V8 es compatible con la sintaxis y las características modernas de ECMAScript.
La documentación del tiempo de ejecución de V8 establece:
Puede usar la sintaxis ECMAScript moderna en scripts que funcionan con el tiempo de ejecución V8. Esta sintaxis incluye let, const y muchas otras características populares.
En ambos casos, son muy vagos en cuanto a qué versión de ECMAScript es compatible, simplemente indican "sintaxis ECMAScript moderna". Esto es problemático porque hay 7 versiones que se lanzaron entre 2015 y 2021 . Por lo tanto, "moderno" podría referirse a cualquiera de estas versiones.
Por ejemplo, podría asumir fácilmente que "moderno" se refiere a la última edición número 12 (2022) de ECMAScript y terminar escribiendo un código como este:
let a = 1_000;
Sin embargo, intentar usar esa sintaxis conduce al error:
Error de sintaxis: ParseError: Token inesperado Línea ILEGAL: ...
En lugar de revisar manualmente cada una de las 6 versiones restantes hasta encontrar la última compatible, sería genial encontrar documentación que indique explícitamente qué versión de ECMAScript es compatible.
Nota: La pregunta relacionada anterior ( ¿Qué edición de ECMA-262 es compatible con Google Apps Script? ) no es útil, ya que esas respuestas también se refieren a "ECMAScript moderno" en lugar de una versión definitiva y específica.
¿Qué versión de ECMAScript es compatible con el tiempo de ejecución V8?
Hay algunos matices aquí:
¿Qué versión de V8 utiliza Google Apps Script?
Una versión razonablemente reciente, y se actualiza cada cierto tiempo. Creo que la idea es rastrear o retrasarse un poco con respecto a las versiones estables de Chrome, pero (al igual que con cualquier proyecto grande que actualice sus dependencias) ocasionalmente puede haber contratiempos/retrasos. En este momento debería estar en algún lugar en el rango de la versión 9.x. (Para futuros lectores: ¡espero que esta declaración esté desactualizada antes de que termine 2022!)
¿Qué versión de ECMAScript admite Google Apps Script V8 Runtime?
Supongo que si hubiera una respuesta simple a esto, la encontraría en la documentación. Como dijo @Kaiido en los comentarios, los motores de JavaScript implementan nuevas características de JavaScript una por una (en lugar de las versiones de EcmaScript). Por lo tanto, para navegadores como para entornos como GAS, por lo general tiene más sentido preguntar "¿es compatible la función X?", Porque es posible que todavía falten algunas funciones, por ejemplo, ES2020, pero algunas funciones ES2021 ya están disponibles.
¿Por qué
let a = 1_000;
producir un error de sintaxis?
Bueno, la versión V8 que usa GAS es lo suficientemente nueva (al menos por dos años) para soportarlo; pero la experiencia general de GAS depende de más que V8: el editor está analizando la fuente ingresada para brindar ayuda o resaltar o verificar errores o lo que sea. Parece que el equipo de GAS es consciente de que ciertas funciones aún no son compatibles con los componentes responsables de eso, y está trabajando activamente para remediarlo. (No tengo idea de cuál es la línea de tiempo).
¿Por qué
let a = 1_000;
producir un error de sintaxis?
Solo para ampliar la respuesta de @ jmrk sobre las nuevas funciones que no son compatibles con el analizador.
function test2564(){ //let a = 1_000; throws syntax error by the parser console.info(eval(`1_000`));// correctly logs 1000 }
El motor V8 subyacente es bueno y admite las funciones más recientes, pero el analizador no le permitirá guardar o ejecutar el proyecto con esas funciones, ya que las considera errores de sintaxis.