stringtranslate.com

Historial de versiones de ECMAScript

ECMAScript es un estándar de JavaScript desarrollado por Ecma International . Desde 2015, se publican versiones principales cada mes de junio.

ECMAScript 2024, la versión 15 y actual, se lanzó en junio de 2024.

Versiones

En junio de 2004, Ecma International publicó el estándar ECMA-357, que define una extensión de ECMAScript, conocida como ECMAScript para XML (E4X). Ecma también definió un "perfil compacto" para ECMAScript, conocido como ES-CP o ECMA 327, que fue diseñado para dispositivos con recursos limitados y que fue retirado en 2015. [14]

4ª Edición (abandonada)

La cuarta edición propuesta de ECMA-262 ( ECMAScript 4 o ES4 ) habría sido la primera actualización importante de ECMAScript desde que se publicó la tercera edición en 1999. La especificación (junto con una implementación de referencia) originalmente estaba prevista para completarse en octubre de 2008. [15] El primer borrador estaba fechado en febrero de 1999. [16] El grupo de trabajo publicó una descripción general del lenguaje el 23 de octubre de 2007. [17]

En agosto de 2008, la propuesta de la cuarta edición de ECMAScript se había reducido a un proyecto cuyo nombre en código era ECMAScript Harmony. Las características que se estaban discutiendo para Harmony en ese momento incluían:

La intención de estas características era, en parte, mejorar la compatibilidad con la programación a gran escala y permitir sacrificar parte de la capacidad del script de ser dinámico para mejorar el rendimiento. Por ejemplo, Tamarin (la máquina virtual para ActionScript, desarrollada y de código abierto por Adobe) tiene compatibilidad con compilación en tiempo real (JIT) para ciertas clases de scripts.

Además de introducir nuevas características, se propuso corregir algunos errores de ES3 en la edición 4. [18] [19] Estas correcciones y otras, y el soporte para codificación/decodificación JSON , se han incorporado a la especificación ECMAScript, 5.ª edición. [20]

El trabajo en la Edición 4 comenzó después de que se completara la especificación ES-CP (Compact Profile), y continuó durante aproximadamente 18 meses, donde se logró un progreso lento para equilibrar la teoría de la especificación JavaScript 2 de Netscape con la experiencia de implementación de JScript .NET de Microsoft. Después de algún tiempo, el enfoque se desplazó al estándar ECMAScript para XML (E4X). La actualización no ha estado libre de controversias. A fines de 2007, un debate entre Eich, más tarde CTO de la Fundación Mozilla , y Chris Wilson, arquitecto de la plataforma de Microsoft para Internet Explorer , se hizo público en varios blogs . Wilson advirtió que debido a que los cambios propuestos a ECMAScript lo hacían incompatible con versiones anteriores del lenguaje en algunos aspectos, la actualización equivalía a "romper la Web", [21] y que las partes interesadas que se oponían a los cambios estaban siendo "ocultadas". [22] Eich respondió afirmando que Wilson parecía estar "repitiendo falsedades en blogs" y negó que hubiera un intento de suprimir el disenso y desafió a los críticos a dar ejemplos específicos de incompatibilidad. [23] Señaló que Microsoft Silverlight y Adobe AIR se basan en C# y ActionScript 3 respectivamente, los cuales son más grandes y complejos que ECMAScript Edition 3. [24]

5.ª edición – ECMAScript 2009

Yahoo, Microsoft, Google y otros disidentes de la cuarta edición formaron su propio subcomité para diseñar una actualización menos ambiciosa de ECMAScript 3, denominada provisionalmente ECMAScript 3.1. Esta edición se centraría en la seguridad y las actualizaciones de bibliotecas, con un gran énfasis en la compatibilidad. Después del debate público mencionado anteriormente, los equipos de ECMAScript 3.1 y ECMAScript 4 acordaron un compromiso: se trabajaría en las dos ediciones en paralelo, con coordinación entre los equipos para garantizar que ECMAScript 3.1 siga siendo un subconjunto estricto de ECMAScript 4 tanto en semántica como en sintaxis.

Sin embargo, las diferentes filosofías en cada equipo resultaron en repetidas violaciones de la regla del subconjunto, y seguía siendo dudoso que los disidentes de ECMAScript 4 apoyaran o implementaran ECMAScript 4 en el futuro. Después de más de un año desde el desacuerdo sobre el futuro de ECMAScript dentro del Comité Técnico 39 de Ecma, los dos equipos llegaron a un nuevo compromiso en julio de 2008: Brendan Eich anunció que Ecma TC39 centraría el trabajo en el proyecto ECMAScript 3.1 (posteriormente renombrado a ECMAScript, 5.ª edición) con la plena colaboración de todas las partes, y los proveedores apuntarían al menos a dos implementaciones interoperables para principios de 2009. [25] [26] En abril de 2009, Ecma TC39 publicó el borrador "final" de la 5.ª edición y anunció que se esperaba que las pruebas de las implementaciones interoperables se completaran a mediados de julio. [27] El 3 de diciembre de 2009 se publicó la quinta edición de la norma ECMA-262. [28]

Las adiciones incluyen JSON , String.trim()para eliminar fácilmente los espacios en blanco que rodean una cadena ( " example "to "example"), String.charAt()para devolver un solo carácter de una posición dada en una cadena y Array.isArray(). Una coma después del par final de valores en un objeto ( var example = { "property1":"value1", "property2":"value2", }) tampoco causa un error de sintaxis. [29]

6.ª edición – ECMAScript 2015

La sexta edición, ECMAScript 6 ( ES6 ) y posteriormente renombrada como ECMAScript 2015, se finalizó en junio de 2015. [4] [30] Esta actualización agrega una nueva sintaxis significativa para escribir aplicaciones complejas, incluidas las declaraciones de clase ( ), módulos ES6 como , pero los define semánticamente en los mismos términos que el modo estricto de ECMAScript 5. Otras características nuevas incluyen iteradores y bucles, generadores de estilo Python , expresión de función de flecha ( ), palabra clave para declaraciones locales, palabra clave para declaraciones locales constantes, datos binarios, matrices tipadas, nuevas colecciones (mapas, conjuntos y WeakMap), promesas , mejoras numéricas y matemáticas, reflexión, proxies (metaprogramación para objetos virtuales y envoltorios) y literales de plantilla que usan comillas invertidas ( ) para cadenas de varias líneas sin caracteres de escape . [31] [32] La lista completa es extensa. [33] [34] Como la primera especificación "ECMAScript Harmony", también se conoce como "ES6 Harmony".class Foo { ... }import * as moduleName from "..."; export const Foofor...of() => {...}letconst`

Séptima edición – ECMAScript 2016

La séptima edición, o ECMAScript 2016, se finalizó en junio de 2016. [5] Sus características incluyen el operador de exponenciación **para números, await, asyncpalabras clave para programación asincrónica (como preparación para ES2017) y la Array.prototype.includesfunción. [5] El operador de exponenciación es equivalente a Math.pow, pero proporciona una sintaxis más simple similar a lenguajes como Python, F#, Perl y Ruby. async/ awaitfue aclamado como una forma más fácil de usar promesas y desarrollar código asincrónico.

8.ª edición – ECMAScript 2017

La octava edición, o ECMAScript 2017, se finalizó en junio de 2017. [6] Sus características incluyen las funciones Object.values, Object.entriesy para una fácil manipulación de objetos, / construcciones que usan generadores y promesas, y características adicionales para concurrencia y atómica . También incluye . [35] [6]Object.getOwnPropertyDescriptorsasyncawaitString.prototype.padStart()

Novena edición – ECMAScript 2018

La novena edición, o ECMAScript 2018, se finalizó en junio de 2018. [7] Las nuevas características incluyen el operador de propagación y los parámetros de descanso ( ...) para literales de objetos, iteración asincrónica Promise.prototype.finallyy adiciones a RegExp. [7]

El operador de propagación permite copiar fácilmente las propiedades de los objetos, como se muestra a continuación.

deje que el objeto = { a : 1 , b : 2 }      let objectClone = Object . allow ({}, object ) // antes de ES2018 let objectClone = {... object } // sintaxis de ES2018         deje que otroObjeto = { c : 3 , ... objeto } console . log ( otroObjeto ) // -> {c: 3, a: 1, b: 2}      

Décima edición – ECMAScript 2019

La décima edición, o ECMAScript 2019, se publicó en junio de 2019. [8] Las características agregadas incluyen, entre otras, Array.prototype.flat, Array.prototype.flatMap, cambios en Array.sort, y Object.fromEntries. [8]

Array.sortahora se garantiza que es estable , lo que significa que los elementos con claves de clasificación iguales no cambiarán el orden relativo antes y después de la operación de clasificación. Array.prototype.flat(depth=1)aplana una matriz a una profundidad especificada, lo que significa que todos los elementos de la submatriz (hasta la profundidad especificada) se concatenan de forma recursiva.

Otro cambio notable es que el llamado enlace catch pasó a ser opcional. [36]

11.ª edición – ECMAScript 2020

La undécima edición, o ECMAScript 2020, se publicó en junio de 2020. [9] Además de nuevas funciones, esta versión introduce un BigInttipo primitivo para números enteros de tamaño arbitrario, el operador de coalescencia nula y el objeto globalThis . [9]

Los BigInts se crean con el BigIntconstructor o con la sintaxis 10n, donde "n" se coloca después del literal numérico. Los BigInts permiten la representación y manipulación de números enteros más allá de , mientras que los números se representan mediante un valor IEEE 754Number.MAX_SAFE_INTEGER de 64 bits de doble precisión . Las funciones integradas en no son compatibles con BigInts; por ejemplo, la exponenciación de BigInts debe realizarse con el operador en lugar de .Math**Math.pow

El operador de fusión nulo, ??, devuelve su operando del lado derecho cuando su lado izquierdo es nullo undefined. Esto contrasta con el ||operador , que devolvería "string"todos los valores "falsos", como los que se muestran a continuación.

indefinido ?? "cadena" // -> "cadena" nulo ?? "cadena" // -> "cadena" falso ?? "cadena" // -> falso NaN ?? "cadena" // -> NaN            

El encadenamiento opcional permite acceder a las propiedades anidadas de un objeto sin tener que realizar una comprobación AND en cada nivel. Un ejemplo es const zipcode = person?.address?.zipcode. Si alguna de las propiedades no está presente, zipcodeestará undefined.

12.ª edición – ECMAScript 2021

La 12.ª edición, ECMAScript 2021, se publicó en junio de 2021. [10] Esta versión introduce el replaceAllmétodo para cadenas; Promise.any, un combinador de promesas que se cortocircuita cuando se cumple un valor de entrada; AggregateError, un nuevo tipo de error para representar varios errores a la vez; operadores de asignación lógica ( ??=, &&=, ||=); WeakRef, para hacer referencia a un objeto de destino sin preservarlo de la recolección de basura, y FinalizationRegistry, para gestionar el registro y la anulación del registro de las operaciones de limpieza realizadas cuando los objetos de destino se recolectan como basura; separadores para literales numéricos ( 1_000); y Array.prototype.sortse hizo más preciso, reduciendo la cantidad de casos que dan como resultado un orden de clasificación definido por la implementación.

13.ª edición – ECMAScript 2022

La 13.ª edición, ECMAScript 2022, se publicó en junio de 2022. [11] Esta versión introduce el nivel superior await, que permite utilizar la palabra clave en el nivel superior de los módulos; nuevos elementos de clase: campos de instancia públicos y privados, campos estáticos públicos y privados, métodos y accesores de instancia privados, y métodos y accesores estáticos privados; bloques estáticos dentro de las clases, para realizar la inicialización de la evaluación por clase; la #x in objsintaxis, para probar la presencia de campos privados en los objetos; índices de coincidencia de expresiones regulares a través del /dindicador, que proporciona índices de inicio y fin para las subcadenas coincidentes; la causepropiedad en Errorlos objetos, que se puede utilizar para registrar una cadena de causalidad en errores; el atmétodo para cadenas, matrices y matrices con tipos, que permite la indexación relativa; y Object.hasOwn, una alternativa conveniente a Object.prototype.hasOwnProperty.

14.ª edición – ECMAScript 2023

La 14.ª edición, ECMAScript 2023, se publicó en junio de 2023. [37] Esta versión introduce los métodos toSorted, toReversed, with, findLasty en y , así como el método en ; agregó soporte para comentarios shebang al comienzo de los archivos para facilitar mejor la ejecución de archivos ECMAScript; y permitió el uso de la mayoría de los símbolos como claves en colecciones débiles.findLastIndexArray.prototypeTypedArray.prototypetoSplicedArray.prototype#!

15.ª edición – ECMAScript 2024

La 15.ª edición, ECMAScript 2024, se publicó en junio de 2024. [38] Esta versión presenta los métodos estáticos Object.groupByy , y el indicador Unicode para expresiones regulares.Map.groupByPromise.withResolvers/v

Los métodos Object.groupByy Map.groupByagrupan un iterable utilizando el valor de retorno de una función de devolución de llamada proporcionada.

// datos de muestra const arr = [ { año : "2024" , id : 0 }, { año : "2023" , id : 1 }, { año : "2024" , id : 2 }, ];                     const obj = Object . groupBy ( arr , ( el ) => el . year ); console . log ( obj ); // { "2024": [{ año: "2024", id: 0 }, { año: "2024", id: 2 }], "2023": [{ año: "2023", id: 1 }] }       

Promise.withResolversproporciona una forma sencilla de obtener las funciones de resolución y rechazo de una promesa directamente sin tener que asignarlas en el constructor. [39]

// ES 2023 deje que se resuelva ; deje que se rechace ; deje que se prometa = new Promise (( res , rej ) => { resolver = res ; rechazar = rej ; });               // ES 2024 const { resolver , rechazar , prometer } = Promise.withResolvers () ;       

La /vbandera en expresiones regulares es simplemente una versión mejorada de la /ubandera, pero como hace cambios incompatibles con versiones anteriores, tuvo que ser introducida como una nueva bandera. [40]

ES.Siguiente

ES.Next es un nombre dinámico que hace referencia a la próxima versión en el momento de la redacción. Las características de ES.Next incluyen propuestas finalizadas (también conocidas como "propuestas de etapa 4"), que se enumeran en las propuestas finalizadas que no forman parte de una especificación ratificada. El comité de lenguaje sigue un modelo de "especificación viva", por lo que estos cambios son parte del estándar y la ratificación es una formalidad. [41]

Referencias

  1. ^ "DevEdge Online – Manual de referencia de JavaScript en línea". Archivado desde el original el 14 de junio de 1997. Consultado el 13 de octubre de 2023 .{{cite web}}: CS1 maint: bot: estado de URL original desconocido ( enlace )
  2. ^ "Referencia de JavaScript". Archivado desde el original el 20 de abril de 1999. Consultado el 13 de octubre de 2023 .{{cite web}}: CS1 maint: bot: estado de URL original desconocido ( enlace )
  3. ^ Archivado en Ghostarchive y Wayback Machine: "Cambios en JavaScript, Parte 1: EcmaScript 5". YouTube. 18 de mayo de 2009. Consultado el 31 de octubre de 2013 .
  4. ^ ab "Especificación del lenguaje ECMAScript 2015". Ecma International . Junio ​​de 2015. Archivado desde el original el 14 de febrero de 2022 . Consultado el 28 de junio de 2021 .
  5. ^ abc «Especificación del lenguaje ECMAScript 2016». Ecma International . Junio ​​de 2016. Archivado desde el original el 14 de febrero de 2022. Consultado el 28 de junio de 2021 .
  6. ^ abc «Especificación del lenguaje ECMAScript 2017». Ecma International . Junio ​​de 2017. Archivado desde el original el 17 de enero de 2021. Consultado el 28 de junio de 2021 .
  7. ^ abc «Especificación del lenguaje ECMAScript 2018». Ecma International . Junio ​​de 2018. Archivado desde el original el 14 de febrero de 2022. Consultado el 28 de junio de 2021 .
  8. ^ abc «Especificación del lenguaje ECMAScript 2019». Ecma International . Junio ​​de 2019. Archivado desde el original el 14 de febrero de 2022. Consultado el 28 de junio de 2021 .
  9. ^ abc «Especificación del lenguaje ECMAScript 2020». Ecma International . Junio ​​de 2020. Archivado desde el original el 18 de enero de 2021. Consultado el 28 de junio de 2021 .
  10. ^ ab "Especificación del lenguaje ECMAScript 2021". Ecma International . Junio ​​de 2021. Archivado desde el original el 24 de junio de 2021 . Consultado el 26 de junio de 2021 .
  11. ^ ab "Especificación del lenguaje ECMAScript 2022". Ecma International . Junio ​​de 2022. Archivado desde el original el 24 de diciembre de 2023 . Consultado el 22 de julio de 2024 .
  12. ^ "Especificación del lenguaje ECMAScript 2023". Ecma International . Junio ​​de 2023. Archivado desde el original el 20 de diciembre de 2023 . Consultado el 22 de julio de 2024 .
  13. ^ "Especificación del lenguaje ECMAScript 2024". Ecma International . Junio ​​de 2024.{{cite web}}: CS1 maint: estado de la URL ( enlace )
  14. ^ Notas de la reunión del 24 de marzo de 2015 Archivado el 23 de junio de 2017 en Wayback Machine . ESDiscuss. Véase también Estándares retirados de ECMA Archivado el 13 de agosto de 2015 en Wayback Machine . ECMA.
  15. ^ Hansen, Lars T (22 de octubre de 2007). "Se publicó un documento con la descripción general de ES4". mozilla.org . Mail.mozilla.org. Archivado desde el original el 2 de noviembre de 2013 . Consultado el 31 de octubre de 2013 .
  16. ^ Peyrott, Sebastian (4 de marzo de 2021). "La verdadera historia detrás de ECMAScript 4". auth0.com . Archivado desde el original el 12 de mayo de 2020 . Consultado el 5 de marzo de 2020 .
  17. ^ "Propuesta de 4.ª edición de ECMAScript: descripción general del lenguaje" (PDF) . ecmascript.org . 23 de octubre de 2007. Archivado desde el original (PDF) el 23 de diciembre de 2010.
  18. ^ John Resig. "John Resig – Correcciones de errores en JavaScript 2". Ejohn.org. Archivado desde el original el 2013-11-02 . Consultado el 2013-10-31 .
  19. ^ "Compatibilidad entre ES3 y el ES4 propuesto" (PDF) . Ecmascript.org. Archivado desde el original (PDF) el 24 de julio de 2014 . Consultado el 31 de octubre de 2013 .
  20. ^ "Especificación del lenguaje ECMAScript" (PDF) . Ecma International . 19 de abril de 2009. Archivado desde el original (PDF) el 19 de abril de 2009 . Consultado el 19 de marzo de 2018 .
  21. ^ "ECMAScript 3 y posteriores – IEBlog – Página principal del sitio – Blogs de MSDN". Blogs.msdn.com. 2007-10-30. Archivado desde el original el 2010-02-11 . Consultado el 2013-10-31 .
  22. ^ "Lo que pienso sobre ES4. – Albatross! – Página de inicio del sitio – Blogs de MSDN". Blogs.msdn.com. 2007-10-31. Archivado desde el original el 2010-01-27 . Consultado el 2013-10-31 .
  23. ^ "Carta abierta a Chris Wilson". Brendan Eich. 2007-10-31. Archivado desde el original el 2011-09-16 . Consultado el 2013-10-31 .
  24. ^ "JavaScript 2 y la Web abierta". 20 de noviembre de 2007. Archivado desde el original el 10 de febrero de 2014. Consultado el 20 de enero de 2014 .
  25. ^ "ECMAScript Harmony". Mail.mozilla.org. 13 de agosto de 2008. Archivado desde el original el 26 de agosto de 2013. Consultado el 31 de octubre de 2013 .
  26. ^ "Un hito importante en la estandarización de JavaScript – Blog de JScript – Página principal del sitio – Blogs de MSDN". Blogs.msdn.com. 2009-04-09. Archivado desde el original el 2010-03-23 . Consultado el 2013-10-31 .
  27. ^ "Ecma International finaliza una importante revisión de ECMAScript". Ecma International. 9 de abril de 2009. Archivado desde el original el 4 de septiembre de 2011. Consultado el 22 de mayo de 2009 .
  28. ^ "Noticias anteriores de Ecma". Ecma-international.org. Archivado desde el original el 16 de abril de 2020. Consultado el 29 de marzo de 2020 .
  29. ^ Versiones de JavaScript de W3schools
  30. ^ Krill, Paul. «Es oficial: ECMAScript 6 está aprobado». InfoWorld . Archivado desde el original el 23 de marzo de 2018. Consultado el 19 de marzo de 2018 .
  31. ^ "5 características geniales en EcmaScript 6 (ES6 Harmony) – Wintellect". Wintellect . 2014-03-24. Archivado desde el original el 2017-07-22 . Consultado el 2018-03-19 .
  32. ^ "ECMAScript 6 (ES6): novedades de la próxima versión de JavaScript". Smashing Magazine . 2015-10-28. Archivado desde el original el 2017-11-24 . Consultado el 2018-03-19 .
  33. ^ "ECMAScript 6: Nuevas características: descripción general y comparación". es6-features.org . Archivado desde el original el 2018-03-18 . Consultado el 2018-03-19 .{{cite web}}: CS1 maint: URL no apta ( enlace )
  34. ^ "Estándar ECMA-262 6.ª edición / junio de 2015 Especificación del lenguaje ECMAScript 2015 14.2 Definiciones de funciones de flecha". www.ecma-international.org . 2015. Archivado desde el original el 2022-02-14 . Consultado el 2021-06-28 .
  35. ^ "ECMAScript 2017 (ES8): el conjunto de características final". 2ality . Archivado desde el original el 23 de abril de 2018 . Consultado el 23 de abril de 2018 .
  36. ^ "ES2019: enlace catch opcional". 2ality.com . 2017-08-13 . Consultado el 26 de abril de 2022 .
  37. ^ "Especificación del lenguaje ECMAScript 2023". Ecma International . Junio ​​de 2023 . Consultado el 30 de junio de 2023 .
  38. ^ "Especificación del lenguaje ECMAScript 2024". Ecma International . Junio ​​de 2024.
  39. ^ "Promise.withResolvers() - JavaScript | MDN". developer.mozilla.org . 2023-11-23 . Consultado el 2024-08-18 .
  40. ^ "RegExp v flag con notación de conjuntos y propiedades de cadenas · V8". v8.dev . Consultado el 18 de agosto de 2024 .
  41. ^ "ES.Next es la próxima edición de la especificación del lenguaje ECMAScript — Tuto Javascript". gdevops.gitlab.io . Consultado el 5 de julio de 2023 .

Enlaces externos

JavaScript 1.0

Normas ISO

Normas ECMA