Introduction
ECMAScript 6, also known as ECMAScript 2015, is the latest version of the ECMAScript standard. ES6 é uma atualização significativa para o idioma, e a primeira atualização para o idioma desde que o ES5 foi padronizado em 2009. A implementação destes recursos nos principais motores JavaScript está em andamento agora.
veja a norma ES6 para a especificação completa da linguagem ECMAScript 6.,
ES6 inclui os seguintes recursos novos:
- setas
- classes
- avançado literais de objeto
- modelo de cadeias de caracteres
- desestruturação
- padrão de + resto + spread
- deixe + const
- iteradores + para..,de
- geradores
- unicode
- módulos
- módulo carregadores
- mapa + definir + weakmap + weakset
- proxies
- símbolos
- subclassable built-ins
- promessas
- matemática + número + string + matriz + objeto APIs
- binário e octal literais
- refletir api
- chamadas finais
ECMAScript 6 Características
Setas
Flechas são uma função de forma abreviada, utilizando o =>
sintaxe. Eles são sintaticamente semelhantes ao recurso relacionado Em C#, Java 8 e CoffeeScript., Eles apoiam ambos os órgãos de bloco de declarações, bem como órgãos de expressão que retornam o valor da expressão. Ao contrário das funções, as setas compartilham o mesmo código lexical this
como seu código circundante.
Mais informações: funções de seta MDN
As Classes
ES6 são um açúcar simples sobre o modelo OO baseado no protótipo. Ter uma única forma declarativa conveniente torna os padrões de classe mais fáceis de usar e incentiva a interoperabilidade. Classes suportam a herança baseada em protótipos, super chamadas, instância e métodos estáticos e construtores.,
Mais informações: MDN Classes
Avançado Literais de Objeto
Objeto literais são estendidos para suportar a definição do protótipo em construção, abreviatura de foo: foo
atribuições, a definição de métodos, fazendo com que super chama e de computação de nomes de propriedade expressões. Juntos, estes também aproximam os literais de objetos e as declarações de classes, e que o design baseado em objetos beneficie de algumas das mesmas conveniências.,
Mais informações: gramática e tipos MDN: literais de objectos
strings de modelos
strings de modelos fornecem açúcar sintático para a construção de strings. Isto é semelhante às características de interpolação de cordas em Perl, Python e muito mais. Opcionalmente, uma tag pode ser adicionada para permitir que a construção de string seja personalizada, evitando ataques de injeção ou construindo estruturas de dados de nível superior a partir do conteúdo de string.
Mais informações: Cadeias de modelos MDN
destruição
destruição permite a ligação usando correspondência de padrões, com suporte para matrizes e objetos correspondentes., A destruição é fail-soft, similar à pesquisa de objetos padrão foo
, produzindo undefined
valores quando não encontrados.
Mais informação: atribuição de destruição MDN
Default + Rest + Spread
Callee-avaliação dos parâmetros predefinidos. Transforme um array em argumentos consecutivos em uma chamada de função. Ligar os parâmetros de Rasto a uma matriz. O resto substitui a necessidade de arguments
e aborda casos comuns mais diretamente.,
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..,De
Iterator objects enable Iteration like CLR IEnumerable or Java Iterable. Generalize for..in
para iteração personalizada baseada no iterador com for..of
. Não é preciso perceber uma matriz, permitindo padrões de design preguiçosos como o LINQ.
iteração é baseada nestas interfaces de tipo pato (usando apenas a sintaxe do tipo TypeScript para a exposição):
Mais informações: MDN for…de geradores
geradores
geradores simplificam a autorização do iterador utilizandofunction*
eyield
., Uma função declarada como função * retorna uma instância Gerador. Os geradores são subtipos de iteradores que incluem next
e throw
. Estes valores activam o fluxo de volta para o gerador, por isso yield
é uma forma de expressão que devolve um valor (ou lança).
nota: também pode ser usado para permitir a programação async semelhante a ‘espera’, ver também ES7 await
proposta.,
O gerador de interface é (usando o TypeScript tipo de sintaxe para exposição única):
interface Generator extends Iterator { next(value?: any): IteratorResult; throw(exception: any);}
Mais informações: MDN Iteração protocolos
Unicode
Não quebra adições para suporte completo a Unicode, incluindo Unicode novo formulário literal em cadeias e new RegExp u
modo de lidar com pontos de código, bem como novas APIs para o processo de seqüências de caracteres no 21bit código de nível de pontos. Estas adições suportam a construção de aplicativos globais em JavaScript.
Mais informações: MDN RegExp.prototipo.,unicode
Módulos
Suporte de Nível de linguagem para módulos para definição de componentes. Codifica padrões de populares Carregadores de módulos JavaScript (AMD, CommonJS). Comportamento de execução definido por um carregador predefinido por máquina. Implicitamente modelo async-nenhum código executa até que os módulos solicitados estejam disponíveis e processados.,v>
Algumas características adicionais incluem export default
e 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);
Mais MDN info: declaração de importação, da declaração de exportação
Módulo Carregadores
o Módulo de carregadores de apoio:
- carregamento Dinâmico
- Estado de isolamento
- namespace Global de isolamento
- Compilação ganchos
- Aninhados virtualização
O padrão de carregador de módulo pode ser configurado, e os novos carregadores pode ser construído para avaliar e carregar o código no isolado ou restrito contextos.,
Map + Set + WeakMap + WeakSet
estruturas de dados eficientes para algoritmos comuns. O smakmaps fornece tabelas laterais sem fugas.
Mais informação MDN: Mapa, conjunto, WeakMap, WeakSet
Proxies
Proxies permitem a criação de objectos com toda a gama de comportamentos disponíveis para hospedar objectos. Pode ser usado para interceptação, virtualização de objetos, registro/análise, etc.
existem armadilhas disponíveis para todas as meta-operações de execução:
Mais informação: Proxy MDN
Símbolos
Símbolos permitem o controlo de Acesso para o estado do objecto., Os símbolos permitem que as propriedades sejam assinaladas por: string
(como em ES5) ou symbol
. Os símbolos são um novo tipo primitivo. Opcional description
parâmetro usado em depuração – mas não faz parte da identidade. Símbolos são únicos (como gensym), mas não privados, uma vez que são expostos através de características de reflexão como Object.getOwnPropertySymbols
.
Mais informações: MDN Símbolo
Subclassable Built-ins
Em ES6, built-ins como o Array
Date
DOM Element
s pode ser uma subclasse.,
Objeto a construção de uma função chamada Ctor
agora usa de duas fases (ambos praticamente envio):
- Chamada de
Ctor
alocar o objeto, a instalação de qualquer comportamento especiais - Invocar o construtor nova instância para inicializar
O conhecido @@create
símbolo está disponível por meio de Symbol.create
. Built-ins agora expõem seu id
explicitamente.,
Math + Number + String + Array + Object APIs
muitas novas adições à biblioteca, incluindo bibliotecas de matemática Central, ajudantes de conversão de Array, ajudantes de String E Object.atribuir para copiar.
Mais informação MDN: número, matemática, matriz.de, Array.of, Array.prototipo.entendido, objecto.atribuir
literais binários e octais
duas novas formas literais numéricas são adicionadas para Binárias (b
) e octal (o
).
0b111110111 === 503 // true0o767 === 503 // true
Promessas
as Promessas são uma biblioteca para programação assíncrona., Promessas são uma representação de primeira classe de um valor que pode ser disponibilizado no futuro. Promessas são usadas em muitas bibliotecas JavaScript existentes.
Mais informação: promessa MDN
reflecte API
API de reflexão completa expondo as meta-operações de execução em objectos. Isto é efetivamente o inverso da API Proxy, e permite fazer chamadas correspondentes às mesmas meta-operações que as armadilhas proxy. Especialmente útil para a implementação de proxies.,
// No sample yet
Mais informações: MDN Reflect
Tail Calls
Calls in tail-position are guarantee to not grow the stack unboundedly. Torna os algoritmos recursivos seguros face a Entradas sem limites.