ECMAScript es un estándar de JavaScript desarrollado por Ecma International . Desde 2015, cada mes de junio se publican versiones principales.
ECMAScript 2023, la versión 14 y actual, se lanzó en junio de 2023.
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, que fue retirado en 2015. [12]
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. [13] El primer borrador data de febrero de 1999. [14] El grupo de trabajo publicó una descripción general del lenguaje el 23 de octubre de 2007. [15]
En agosto de 2008, la propuesta de la cuarta edición de ECMAScript se había reducido a un código de proyecto denominado 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 soportar mejor la programación en general y permitir sacrificar parte de la capacidad del script para 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 soporte de compilación justo a tiempo (JIT) para ciertas clases de scripts.
Además de introducir nuevas funciones, se propuso corregir algunos errores de ES3 en la edición 4. [16] [17] Estas correcciones y otras, y la compatibilidad con la codificación/decodificación JSON , se han incluido en la especificación ECMAScript, quinta edición. [18]
El trabajo comenzó en la Edición 4 después de que se completó la especificación ES-CP (Compact Profile) y continuó durante aproximadamente 18 meses donde se logró un lento progreso equilibrando 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 un tiempo, la atención se centró en el estándar ECMAScript para XML (E4X). La actualización no ha estado exenta de polémica. A finales de 2007, un debate entre Eich, más tarde director de tecnología 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 en algunos aspectos con versiones anteriores del lenguaje, la actualización equivalía a "romper la Web", [19] y que las partes interesadas que se oponían a los cambios estaban siendo "ocultadas de la vista". . [20] Eich respondió afirmando que Wilson parecía estar "repitiendo falsedades en blogs" y negó que hubiera un intento de suprimir la disidencia y desafió a los críticos a dar ejemplos específicos de incompatibilidad. [21] 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. [22]
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, tentativamente denominada ECMAScript 3.1. Esta edición se centraría en la seguridad y las actualizaciones de la biblioteca, con un gran énfasis en la compatibilidad. Después del enfrentamiento público antes mencionado, 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 de cada equipo dieron como resultado repetidas violaciones de la regla del subconjunto, y seguía siendo dudoso que los disidentes de ECMAScript 4 alguna vez 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 su trabajo en ECMAScript 3.1 (posteriormente rebautizado como ECMAScript, 5.º Edition) con plena colaboración de todas las partes, y los proveedores apuntarían a al menos dos implementaciones interoperables a principios de 2009. [23] [24] En abril de 2009, Ecma TC39 publicó el borrador "final" de la quinta edición y anunció que las pruebas de Se esperaba que las implementaciones interoperables se completaran a mediados de julio. [25] El 3 de diciembre de 2009 se publicó la quinta edición de ECMA-262. [26]
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 desde una posición determinada en una cadena y Array.isArray()
. Una coma después del último par de valores de un objeto ( var example = { "property1":"value1", "property2":"value2", }
) tampoco provoca un error de sintaxis. [27]
La sexta edición, ECMAScript 6 ( ES6 ) y luego renombrada a ECMAScript 2015, se finalizó en junio de 2015. [4] [28] Esta actualización agrega una sintaxis nueva e importante para escribir aplicaciones complejas, incluidas declaraciones de clases ( ), 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 ( ), palabras clave para declaraciones locales, palabras clave para declaraciones locales constantes, datos binarios, matrices escritas, nuevas colecciones (mapas, conjuntos y WeakMap), promesas , números y mejoras matemáticas, reflexión, proxies (metaprogramación para objetos virtuales y envoltorios) y literales de plantilla que utilizan comillas invertidas ( ) para cadenas de varias líneas sin caracteres de escape . [29] [30] La lista completa es extensa. [31] [32] Como la primera especificación "ECMAScript Harmony", también se la conoce como "ES6 Harmony".class Foo { ... }
import * as moduleName from "..."; export const Foo
for...of
() => {...}
let
const
`
La séptima edición, o ECMAScript 2016, se finalizó en junio de 2016. [5] Sus características incluyen alcance de bloque de variables y funciones, patrones de desestructuración (de variables), llamadas de cola adecuadas , operador de exponenciación **
para números, await
palabras async
clave para programación asincrónica ( como preparación para ES2017), y la Array.prototype.includes
función. [5] [33]
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
/ await
fue aclamado como una forma más sencilla de utilizar promesas y desarrollar código asincrónico.
La octava edición, o ECMAScript 2017, se finalizó en junio de 2017. [6] Sus características incluyen Object.values
, Object.entries
y Object.getOwnPropertyDescriptors
funciones para una fácil manipulación de Objetos, async
/ await
construcciones que usan generadores y promesas, y características adicionales para concurrencia y atómica . También incluye String.prototype.padStart()
. [34] [6]
La novena edición, o ECMAScript 2018, finalizó en junio de 2018. [7] Las nuevas características incluyen el operador de extensión y los parámetros de descanso ( ...
) para literales de objetos, iteración asincrónica Promise.prototype.finally
y adiciones a RegExp. [7]
El operador de extensión permite copiar fácilmente las propiedades del objeto, como se muestra a continuación.
dejar objeto = { a : 1 , b : 2 } let objectClone = Objeto . asignar ({}, objeto ) // antes de ES2018 let objectClone = {... objeto } // sintaxis de ES2018 let otherObject = { c : 3 , ... object } consola . iniciar sesión ( otroObjeto ) // -> {c: 3, a: 1, b: 2}
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.sort
ahora 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 del subarreglo (hasta la profundidad especificada) se concatenan de forma recursiva.
Otro cambio notable es que el llamado enlace de captura pasó a ser opcional. [35]
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 BigInt
tipo primitivo para enteros de tamaño arbitrario, el operador coalescente nulo y el objeto globalThis . [9]
Los BigInts se crean con el BigInt
constructor o con la sintaxis 10n
, donde se coloca "n" después del número literal. BigInts permite la representación y manipulación de números enteros más allá de Number.MAX_SAFE_INTEGER
, mientras que los números se representan mediante un valor IEEE 754 de 64 bits de doble precisión. Las funciones integradas Math
no son compatibles con BigInts; por ejemplo, la exponenciación de BigInts se debe realizar con el **
operador en lugar de Math.pow
.
El operador coalescente nulo ??
, devuelve su operando del lado derecho cuando su lado izquierdo es null
o undefined
. Esto contrasta con el ||
operador, que devolvería "string"
todos los valores "falsos", como los siguientes.
indefinido ?? "cadena" // -> "cadena" nula ?? "cadena" // -> "cadena" falsa ?? "cadena" // -> falso NaN ?? "cadena" // -> NaN
El encadenamiento opcional permite acceder a las propiedades anidadas de un objeto sin tener una verificación AND en cada nivel. Un ejemplo es const zipcode = person?.address?.zipcode
. Si alguna de las propiedades no está presente, zipcode
será undefined
.
La duodécima edición, ECMAScript 2021, se publicó en junio de 2021. [10] Esta versión presenta el replaceAll
método para cadenas; Promise.any
, un combinador de promesas que provoca un cortocircuito cuando se cumple un valor de entrada; AggregateError
, un nuevo tipo de error para representar múltiples 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 cancelació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.sort
se hizo más preciso, reduciendo la cantidad de casos que resultan en un orden de clasificación definido por la implementación.
La decimotercera edición, ECMAScript 2022, se publicó en junio de 2022. [11] Esta versión presenta el nivel superior await
, lo que permite que la palabra clave se utilice 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 descriptores de acceso de instancia privados, y métodos y descriptores de acceso estáticos privados; bloques estáticos dentro de clases, para realizar la inicialización de evaluación por clase; la #x in obj
sintaxis, para comprobar la presencia de campos privados en los objetos; índices de coincidencia de expresiones regulares/d
a través de la bandera, que proporciona índices de inicio y fin para subcadenas coincidentes; la cause
propiedad sobre Error
los objetos, que puede utilizarse para registrar una cadena de causalidad en errores; el at
método para Strings, Arrays y TypedArrays, que permite la indexación relativa; y Object.hasOwn
una alternativa conveniente a Object.prototype.hasOwnProperty
.
La decimocuarta edición, ECMAScript 2023, se publicó en junio de 2023. [36] Esta versión presenta los métodos toSorted
, toReversed
, with
, findLast
y findLastIndex
en Array.prototype
y TypedArray.prototype
, así como el toSpliced
método en Array.prototype
; se agregó soporte para comentarios #!
shebang al comienzo de los archivos para facilitar mejor los archivos ECMAScript ejecutables; y permitió el uso de la mayoría de los símbolos como claves en colecciones débiles.
ES.Next es un nombre dinámico que se refiere a la próxima versión al momento de escribir este artículo. Las características de ES.Next incluyen propuestas terminadas (también conocidas como "propuestas de etapa 4") enumeradas en propuestas terminadas que no forman parte de una especificación ratificada. El comité de idiomas sigue un modelo de "especificaciones vivas", por lo que estos cambios son parte del estándar y la ratificación es una formalidad. [37]
{{cite web}}
: Mantenimiento CS1: bot: estado de la URL original desconocido ( enlace ){{cite web}}
: Mantenimiento CS1: bot: estado de la URL original desconocido ( enlace ){{cite web}}
: Mantenimiento CS1: bot: estado de la URL original desconocido ( enlace )