ECMAScript (Español)
La especificación ECMAScript es una especificación estandarizada de un lenguaje de scripting desarrollado por Brendan Eich de Netscape; inicialmente llamado Mocha, luego LiveScript, y finalmente JavaScript. En diciembre de 1995, Sun Microsystems y Netscape anunciaron JavaScript en un comunicado de prensa. En noviembre de 1996, Netscape anunció una reunión de la Organización Internacional de estándares Ecma para avanzar en la estandarización de JavaScript. La primera edición de la ECMA-262 fue adoptada por la Asamblea General de la Ecma en junio de 1997. Desde entonces se han publicado varias ediciones del estándar lingüístico., El nombre «ECMAScript» fue un compromiso entre las organizaciones involucradas en la estandarización del lenguaje, especialmente Netscape y Microsoft, cuyas disputas dominaron las primeras sesiones de estándares. Eich comentó que » ECMAScript siempre fue un nombre comercial no deseado que suena como una enfermedad de la piel.»ECMAScript ha sido formalizado a través de la semántica operativa por el trabajo en la Universidad de Stanford y el Departamento de computación del Imperial College de Londres para el análisis de seguridad y estandarización.,
tanto JavaScript como JScript se ajustan a la especificación ECMAScript a la vez que proporcionan características adicionales no descritas en la especificación.
VersionsEdit
Hay once ediciones de ECMA-262 publicado. El trabajo en la versión 11 de la norma se finalizó en junio de 2020.,
Edition | Date published | Name | Changes from prior edition | Editor | |||
---|---|---|---|---|---|---|---|
1 | junio de 1997 | primera edición | guy L. Steele Jr.,998 | cambios editoriales para mantener la especificación totalmente alineada con el estándar internacional ISO/IEC 16262 | Mike Cowlishaw | ||
3 | diciembre de 1999 | se agregaron Expresiones Regulares, mejor manejo de cadenas, nuevas instrucciones de control, manejo de excepciones try/catch, definición más estricta de errores, formato para la salida numérica y otras mejoras | Mike Cowlishaw | ||||
4 | Abandoned (Last draft 30 June 2003) | fourth edition was abandoned, due to political differences concerning language complexity., Muchas de las características propuestas para la cuarta edición se han eliminado por completo; algunas se incorporaron a la sexta edición. | |||||
5 | diciembre de 2009 | añade «modo estricto», un subconjunto destinado a proporcionar una comprobación de errores más completa y evitar construcciones propensas a errores. Aclara muchas ambigüedades en la especificación de la 3a edición, y acomoda el comportamiento de implementaciones del mundo real que diferían consistentemente de esa especificación., Añade algunas características nuevas, como getters y setters, compatibilidad con bibliotecas JSON y una reflexión más completa sobre las propiedades de los objetos. | Pratap Lakshman, Allen Wirfs-Brock | ||||
5.1 | junio de 2011 | esta edición 5.1 del estándar ECMAScript está totalmente alineada con la tercera edición del estándar internacional ISO/IEC 16262:2011., | See 9th Edition – ECMAScript 2018 | Brian Terlson | |||
10 | June 2019 | ECMAScript 2019 (es2019) | See 10th Edition – ECMAScript 2019 | Brian Terlson, Bradley Farias, Jordan Harband | |||
11 | June 2020 | ECMAScript 2020 (es2020) | see 11th edition – ECMAScript 2020 | Jordan harband, Kevin Smith |
en junio de 2004, Ecma International publicó el estándar ECMA-357, definiendo una extensión A ECMAScript, conocida como ECMAScript for 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.
4th Edition (abandoned)Edit
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) estaba originalmente destinada a completarse en octubre de 2008. El primer borrador estaba fechado en febrero de 1999., El grupo de trabajo publicó un resumen del texto el 23 de octubre de 2007.
en agosto de 2008, la propuesta de ECMAScript 4th edition había sido reducida a un proyecto con nombre en código ECMAScript Harmony. Las características bajo discusión para Harmony en ese momento incluyeron:
- clases,
- Un sistema de Módulos,
- anotaciones de tipo opcionales y escritura estática, probablemente utilizando un sistema de tipo estructural,
- generadores e iteradores,
- asignación de desestructuración, y
- Tipos de datos algebraicos.,
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-es compatible con la compilación just – in-time (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. Estas correcciones y otras, y el soporte para la codificación/decodificación JSON, se han plegado en la especificación ECMAScript, 5th Edition.,
El trabajo comenzó en la edición 4 Después de que se completara la especificación es-CP (Compact Profile), y continuó durante aproximadamente 18 meses donde se realizó 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 algún tiempo, el enfoque cambió al estándar ECMAScript FOR XML (E4X). La actualización no ha estado exenta de controversia. A finales 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 una serie de blogs., Wilson advirtió que debido a que los cambios propuestos a ECMAScript lo hacían incompatible hacia atrás en algunos aspectos con las versiones anteriores del lenguaje, la actualización equivalía a «romper la Web», y que las partes interesadas que se oponían a los cambios estaban «ocultas a la vista». 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., Señaló que Microsoft Silverlight y Adobe AIR dependen de C# y ActionScript 3, respectivamente, los cuales son más grandes y más complejos que ECMAScript Edition 3.
5A Edicióneditar
Yahoo, Microsoft, Google y otros disidentes de la 4a edición formaron su propio Subcomité para diseñar una actualización menos ambiciosa de ECMAScript 3, tentativamente llamada 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 sparring público antes mencionado, el ECMAScript 3.,1 y los equipos de ECMAScript 4 acordaron un compromiso: las dos ediciones se trabajarían, en paralelo, con la 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 roturas de la regla del subconjunto, y seguía siendo dudoso que los disidentes de ECMAScript 4 alguna vez apoyarían o implementarían 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 se centraría en el trabajo en el proyecto ECMAScript 3.1 (más tarde renombrado a ECMAScript, 5th Edition) con la colaboración completa de todas las partes, y los proveedores se dirigirían al menos a dos implementaciones interoperables a principios de 2009. En abril de 2009, Ecma TC39 publicó el borrador «final» de la 5a edición y anunció que se esperaba que las pruebas de implementaciones interoperables se completaran a mediados de julio., El 3 de diciembre de 2009, ECMA-262 5a edición fue publicada.
6ª edición – ECMAScript 2015Editar
la 6ª edición, inicialmente conocida como ECMAScript 6 (ES6) y luego renombrada a ECMAScript 2015, se finalizó en junio de 2015. Esta actualización añade una nueva sintaxis significativa para escribir aplicaciones complejas, incluyendo declaraciones de clase (class Foo { ... }
), módulos ES6 como import * as moduleName from "..."; export const Foo
, 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 for...of
, generadores de estilo Python, expresión de función de flecha (() => {...}
), let
palabra clave para declaraciones locales, const
palabra clave para declaraciones locales constantes, datos binarios, matrices tipificadas, nuevas colecciones (mapas, conjuntos y mapa débil), promesas, mejoras numéricas y matemáticas, reflexión, proxies (metaprogramación para objetos virtuales y envoltorios) y literales de plantilla para cadenas. La lista completa es extensa., Como la primera especificación «ECMAScript Harmony», también se conoce como » ES6 Harmony.»
7ª edición – ECMAScript 2016Editar
la 7ª edición, conocida oficialmente como ECMAScript 2016, se finalizó en junio de 2016. Sus características incluyen el alcance de bloques de variables y funciones, patrones de desestructuración (de variables), llamadas de cola adecuadas, operador de exponenciación **
para números, await
, async
palabras clave para programación asíncrona, y el .prototipo.incluye la función
.,
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 fácil de usar promesas y desarrollar código asincrónico.
8a edición – ECMAScript 2017editar
la 8a edición, conocida oficialmente como ECMAScript 2017, se finalizó en junio de 2017. Sus características incluyen el objeto .valores
, Objeto.,entradas
y Objeto.getOwnPropertyDescriptors
funciones para una fácil manipulación de objetos, async/await
construcciones que utilizan generadores y promesas, y características adicionales para concurrencia y atomics.
9ª edición – ECMAScript 2018editar
la 9ª edición, conocida oficialmente como ECMAScript 2018, se finalizó en junio de 2018. Las nuevas características incluyen operadores rest / spread para literales de objetos (tres puntos: ...identifier
), iteración asíncrona, Promise.prototype.finally
y adiciones a RegExp.,
el operador spread permite copiar fácilmente las propiedades de los objetos, como se muestra a continuación.
10a edición – ECMAScript 2019editar
la 10a edición, conocida oficialmente como ECMAScript 2019, se publicó en junio de 2019. Las características adicionales incluyen, pero no están limitados a, Array.prototype.flat
, Array.prototype.flatMap
, los cambios de Array.sort
y Object.fromEntries
.
Array.ahora se garantiza que sort
sea estable, lo que significa que los elementos con la misma prioridad de Ordenación aparecerán en el mismo orden en la matriz ordenada., Array.prototype.flat(depth=1)
aplana una matriz a una profundidad especificada, lo que significa que todos los elementos de subarray (hasta la profundidad especificada) se concatenan recursivamente.
11ª Edición – ECMAScript 2020Edit
La 11ª edición, conocido oficialmente como ECMAScript 2020, se publicó en junio de 2020. Además de nuevas funciones, esta versión incluye un tipo primitivo BigInt
para enteros de tamaño arbitrario, el operador coalescente nullish y el objeto globalThis.,
Los BigInts se crean con el constructor BigInt
o con la sintaxis 10N
, donde » n » se coloca después del literal del número. Los BigInts permiten la representación y manipulación de enteros más allá del número .MAX_SAFE_INTEGER
, mientras que los números están representados por un valor IEEE 754 de 64 bits de doble precisión., Las funciones integradas en Math
no son compatibles con BigInts; por ejemplo, la exponenciación de BigInts debe hacerse con el operador **
en lugar de Math.pow
.
el operador coalescente nullish, ??
, se devuelve su mano derecha operando cuando su mano izquierda es null
o undefined
., Esto contrasta con el operador ||
, que devolvería «string» para todos los ejemplos.
false ?? "string" // -> falseNaN ?? "string" // -> NaNundefined ?? "string" // -> "string"
el encadenamiento opcional le permite acceder a los nodos anidados en un objeto sin tener una y comprobar en cada nivel.
un ejemplo es const zipcode = person?.dirección?.Código Postal
. Si alguna de las propiedades no está presente, zipcode
será undefined
.
ES.NextEdit
ES.,Siguiente es un nombre dinámico que se refiere a lo que sea la siguiente versión en el momento de escribir. ES.Las siguientes características son las propuestas terminadas (también conocidas como «propuestas de etapa 4») que se enumeran en la propuesta terminada 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.