Introducción
ECMAScript 6, también conocido como ECMAScript 2015, es la última versión del estándar ECMAScript. ES6 es una actualización significativa del idioma, y la primera actualización del idioma desde que ES5 se estandarizó en 2009. La implementación de estas características en los principales motores JavaScript está en marcha.
vea el estándar ES6 para la especificación completa del lenguaje ECMAScript 6.,
ES6 incluye las siguientes características nuevas:
- flechas
- clases
- literales de objetos mejorados
- cadenas de plantilla
- desestructuring
- default + rest + spread
- let + const
- iteradores + for..,de
- generadores
- unicode
- modules
- module loaders
- map + set + weakmap + weakset
- proxies
- symbols
- subclassable built-ins
- promises
- math + number + string + array + object APIs
- binario y octal literals
- reflect API
- tail calls
características de ECMAScript 6
arrows
arrows son una abreviatura de función que utiliza la sintaxis =>
. Son sintácticamente similares a la característica relacionada en C#, Java 8 y CoffeeScript., Soportan tanto cuerpos de bloque de sentencia como cuerpos de expresión que devuelven el valor de la expresión. A diferencia de las funciones, las flechas comparten el mismo léxico this
como su código circundante.
Más información: Funciones de flecha MDN
clases
Las Clases ES6 son un simple azúcar sobre el patrón oo basado en prototipos. Tener una sola forma declarativa conveniente hace que los patrones de clase sean más fáciles de usar y fomenta la interoperabilidad. Las clases admiten herencia basada en prototipos, super llamadas, instancias y métodos estáticos y constructores.,
Más información: las clases MDN
literales de objetos mejorados
Los literales de objetos se amplían para admitir la configuración del prototipo En construcción, la abreviatura de las asignaciones foo: foo
, la definición de métodos, la realización de súper llamadas y el cálculo de nombres de propiedades con expresiones. Juntos, estos también acercan los literales de objetos y las declaraciones de clase, y permiten que el diseño basado en objetos se beneficie de algunas de las mismas comodidades.,
Más información: gramática y tipos de MDN: literales de objeto
cadenas de plantilla
Las cadenas de plantilla proporcionan azúcar sintáctico para construir cadenas. Esto es similar a las características de interpolación de cadenas en Perl, Python y más. Opcionalmente, se puede agregar una Etiqueta para permitir que la construcción de la cadena se personalice, evitando ataques de inyección o construyendo estructuras de datos de nivel superior a partir del contenido de la cadena.
Más información: MDN Template Strings
Desestructuring
Desestructuring permite enlazar usando pattern matching, con soporte para emparejar arrays y objetos., La desestructuración es fail-soft, similar a la búsqueda de objetos estándar foo
, produciendo valores undefined
cuando no se encuentran.
Más información: MDN Desestructuring assignment
Default + Rest + Spread
valores de parámetros predeterminados evaluados por el destinatario. Convierte un array en argumentos consecutivos en una llamada a función. Enlaza los parámetros finales a una matriz. Rest reemplaza la necesidad de arguments
y aborda casos comunes más directamente.,
function f(x, y=12) { // y is 12 if not passed (or passed as undefined) return x + y;}f(3) == 15
function f(x, ...y) { // y is an Array return x * y.length;}f(3, "hello", true) == 6
function f(x, y, z) { return x + y + z;}// Pass each elem of array as argumentf(...) == 6
More MDN info: Default parameters, Rest parameters, Spread Operator
Let + Const
Block-scoped binding constructs. let
is the new var
. const
is single-assignment. Static restrictions prevent use before assignment.
function f() { { let x; { // okay, block scoped name const x = "sneaky"; // error, const x = "foo"; } // error, already declared in block let x = "inner"; }}
More MDN info: let statement, const statement
Iterators + For..,Los objetos Iterator de
permiten la iteración personalizada como CLR Iterumerable o Java Iterable. Generalice for..in
a una iteración personalizada basada en iteradores con for..of
. No requiere realizar una matriz, lo que permite patrones de diseño perezosos como LINQ.
la iteración se basa en estas interfaces de tipo pato (usando la sintaxis de tipo TypeScript solo para la exposición):
Más información: MDN for…de
Generadores
Generadores de simplificar iterador-autoría con function*
y yield
., Una función declarada como function * devuelve una instancia del generador. Los generadores son subtipos de iteradores que incluyen adicional next
y throw
. Estos permiten que los valores vuelvan al generador, por lo que yield
es una forma de expresión que devuelve un valor (o lanza).
Nota: También se puede usar para habilitar la programación asíncrona similar a ‘await’, consulte también ES7 await
propuesta.,
la interfaz del generador es (usando la sintaxis de tipo TypeScript solo para la exposición):
interface Generator extends Iterator { next(value?: any): IteratorResult; throw(exception: any);}
Más información: MDN Iteration protocols
Unicode
adiciones sin interrupción para admitir Unicode completo, incluyendo nueva forma literal Unicode en cadenas y nueva expresión regular u
mode to handle code points, as well as new APIs to process strings at the 21bit code points level. Estas adiciones admiten la creación de aplicaciones globales en JavaScript.
Más información: MDN RegExp.prototipo.,unicode
Modules
soporte a nivel de idioma para módulos para la definición de componentes. Codifica patrones de cargadores de Módulos JavaScript populares (AMD, CommonJS). Comportamiento en tiempo de ejecución definido por un cargador predeterminado definido por el host. Modelo implícitamente asincrónico-ningún código se ejecuta hasta que los módulos solicitados estén disponibles y procesados.,v>
algunas características adicionales incluyen export default
y export *
:
// lib/mathplusplus.jsexport * from "lib/math";export var e = 2.71828182846;export default function(x) { return Math.log(x);}
// app.jsimport ln, {pi, e} from "lib/mathplusplus";alert("2π = " + ln(e)*pi*2);
más información MDN: import statement, Export statement
module loaders
module loaders support:
- dynamic loading
- State Isolation
- global namespace Isolation
- Compilation hooks
- virtualización anidada
el cargador de módulos predeterminado se puede configurar, y se pueden construir nuevos cargadores para evaluar y cargar código contextos restringidos.,
Map + Set + WeakMap + WeakSet
estructuras de datos eficientes para algoritmos comunes. WeakMaps proporciona mesas auxiliares sin fugas de objetos clave.
Más información MDN: Map, Set, WeakMap, WeakSet
Proxies
los Proxies permiten la creación de objetos con toda la gama de comportamientos disponibles para alojar objetos. Se puede utilizar para interceptación, virtualización de objetos,registro / creación de perfiles, etc.
hay trampas disponibles para todas las metaoperaciones a nivel de tiempo de ejecución:
Más información: Proxy MDN
Símbolos
Los símbolos habilitan el control de acceso para el estado del objeto., Los símbolos permiten que las propiedades sean codificadas por string
(como en ES5) o symbol
. Los símbolos son un nuevo tipo primitivo. Parámetro opcional description
utilizado en la depuración – pero no es parte de la identidad. Los símbolos son únicos (como gensym), pero no privados, ya que están expuestos a través de características de reflexión como Object.getOwnPropertySymbols
.
Más información: MDN Symbol
Subclasable Built-ins
en ES6, built-ins como Array
, Date
y DOM Element
s pueden ser subclasadas.,
la construcción de objetos para una función llamada Ctor
ahora usa dos fases (ambas prácticamente despachadas):
- Call
Ctor
para asignar el objeto, instalando cualquier comportamiento especial - Invoke constructor en una nueva instancia para inicializar
el conocido está disponible a través de Symbol.create
. Los Built-ins ahora exponen su @@create
explícitamente.,
Math + Number + String + Array + Object APIs
muchas adiciones de bibliotecas nuevas, incluidas bibliotecas matemáticas básicas, ayudantes de conversión de matrices, ayudantes de cadenas y objetos.asignar para copiar.
Más información MDN: número, Matemáticas, matriz.de, Array.de, matriz.prototipo.copiado dentro, objeto.asignar
literales binarios y octales
se agregan dos nuevas formas literales numéricas para binary (b
) y octal (o
).
0b111110111 === 503 // true0o767 === 503 // true
Promises
Promises son una biblioteca para programación asíncrona., Las promesas son una representación de primera clase de un valor que puede estar disponible en el futuro. Las promesas se utilizan en muchas bibliotecas JavaScript existentes.
Más información: MDN Promise
Reflect API
Full reflection API exponiendo las meta-operaciones a nivel de tiempo de ejecución en objetos. Esto es efectivamente el inverso de la API de Proxy, y permite hacer llamadas correspondientes a las mismas metaoperaciones que las trampas de proxy. Especialmente útil para implementar proxies.,
// No sample yet
Más información: MDN Reflect
Tail Calls
se garantiza que las llamadas en tail-position no harán crecer la pila sin restricciones. Hace que los algoritmos recursivos sean seguros frente a Entradas ilimitadas.