JS, Node.js, Frontend, Backend, Firebase, Express, Patrones, HTML5_APIs, Asincronía, Websockets, Testing
- Compatibilidad 2016+
- Axel Rauschmayer blog | ES2016
- What’s coming to Javascript (ES7 + ES8)
- ES7 and ES8 Features
- Exploring ES2016 and ES2017
var lista = ['a', 'b', 'c'];
var iterador = lista.entries();
console.log(iterador.next().value); // [0, "a"]
console.log(iterador.next().value); // [1, "b"]
var lista = ['f', 'i', 'c', 't', 'i', 'c', 'i', 'a'];
var iterator = lista.values();
console.log(iterator.next().value); // f
console.log(iterator.next().value); // i
console.log(iterator.next().value); // c
console.log(iterator.next().value); // t
console.log(iterator.next().value); // i
//...
var lista = ['a', 'b', 'c'];
var iterator = lista.keys();
for (let key of iterator) {
console.log(key); // expected output: 0 1 2
}
En la práctica...
var a = [1,2,3];
[...a.values()]; // [1,2,3]
[...a.keys()]; // [0,1,2]
[...a.entries()]; // [ [0,1], [1,2], [2,3] ]
- Retorna un booleno si encuentra el elemento. Tiene muchas mejoras respecto
Array.prototype.indexOf
- Propuesto por Domenic Denicola y Rick Waldron
- ECMA documentation
['a', 'b', 'c'].includes('a') // true
['a', 'b', 'c'].includes('d') // false
// similitud con indexOf:
// arr.includes(x) -> arr.indexOf(x) >= 0
[NaN].includes(NaN) // true
[NaN].indexOf(NaN) // -1
// @see: http://speakingjs.com/es5/ch11.html#two_zeros
[-0].includes(+0) // true
// Arrays tipados también lo incluyen
let arrTip = Uint8Array.of(12, 5, 3);
console.log(arrTip.includes(5)); // true
- Añade el operador exponencial
x ** y
, su comportamiento es igual queMath.pow(x, y)
- Propuesto por Rick Waldron, Claude Pache y Brendan Eich
- ECMA documentation
let cuadrado = 3 ** 2; // 9
let numero = 3;
numero **= 2; // 9
- Async Functions for ECMAScript
- Simplifying asynchronous computations via generators (section in “Exploring ES6”)
- ES proposal: async functions
- Compatibilidad 2016+
- Axel Rauschmayer blog | ES2017
- Shared memory and atomics for ECMAscript
- ES8, el estándar Javascript de 2017 de Enrique Oriol
- Exploring ES2018 and ES2019
- ECMAScript - A Taste from ES2018 (ES9)
- 6 Reasons Why JavaScript’s Async/Await Blows Promises Away (Tutorial)
Propuesto por Brian Terlson
Código asíncrono utilizando promesas y generadores
- Nativo
function fetchJson(url) {
return fetch(url)
.then(request => request.text())
.then(text => {
return JSON.parse(text);
})
.catch(error => {
console.log(`ERROR: ${error.stack}`);
});
}
fetchJson('http://example.com/some_file.json')
.then(obj => console.log(obj));
- Usando la librería CO
const fetchJson = co.wrap(function* (url) {
try {
let request = yield fetch(url);
let text = yield request.text();
return JSON.parse(text);
}
catch (error) {
console.log(`ERROR: ${error.stack}`);
}
});
- Funciones Asíncronas
async function fetchJson(url) {
try {
let request = await fetch(url);
let text = await request.text();
return JSON.parse(text);
}
catch (error) {
console.log(`ERROR: ${error.stack}`);
}
}
- Variantes
// Declaración
async function foo() {}
// Expresión
const foo = async function () {};
// Método
let obj = { async foo() {} }
// Formato Arrow Function
const foo = async () => {};
- Gestiona multithreading en Javascript, basicamente web wrokers con
ArrayBuffer
. - Muy bajo nivel
- Propuesto por Lars T. Hansen
- Retornan un array o una matriz con los valores o las propiedades iterables de los objetos
- Propuesto por Jordan Harband
Objetos
const data = { elemnto: 'primero', otro_dato: 1 };
Object.values(data); // ["primero", 1]
Object.entries(data); // [["elemnto", "primero"], ["otro_dato", 1]]
Arrays
const obj = ['p1', 'p2', 'p3']; // equivale a { 0: 'a', 1: 'z', 2: '5' };
Object.values(obj); // ["p1", "p2", "p3"]
Object.entries(obj); // [["0", "p1"], ["1", "p2"], ["2", "p3"]]
Cadenas
Object.values('Fictizia'); // ["F", "i", "c", "t", "i"]
Object.entries('Ficti'); // [["0", "F"], ["1", "i"], ["2", "c"], ["3", "t"], ["4", "i"]]
- Se rellena una cadena por delante con
padStart
o por detras conpadEnd
, puedes especificar el relleno - Propuesto por Jordan Harband y Rick Waldron
// .padStart()
'data'.padStart(1); // "data"
'data'.padStart(7); // " data"
'data'.padStart(6, '-'); // "--data"
'data'.padStart(10, 'info'); // "infoindata"
'data'.padStart(5, '*'); // "*data"
// .padEnd()
'data'.padEnd(1); // "data"
'data'.padEnd(7); // "data "
'data'.padEnd(6, '-'); // "data--"
'data'.padEnd(10, 'info'); // "datainfoin"
'data'.padEnd(5, '*'); // "data*"
- No confundir con
Object.getOwnPropertyDescriptor()
- Devulve las descripciones de las propiedades del objeto
- Esta pensado para facilitar el clonado de objetos ya que no se muestran propiedades heredadas por prototype
- Propuesto por Jordan Harband y Andrea Giammarchi
- Object.getOwnPropertyDescriptors Proposal
- Se ignorarán las comas extras al final del último parámetro de una función
- Propuesto por Jeff Morrison
//En declaración
function foo(p1, p2, p3,) {
//...
}
//En ejecución
foo("a", "b", "b",);
- Template Literal Revision Propuesto por Tim Disney
- s (dotAll) flag for regular expressions Propuesto por Mathias Bynens
- Rest/Spread Properties Propuesto por Sebastian Markbåge
- Asynchronous Iteration Propuesto por Domenic Denicola
- RegExp Unicode Property Escapes Propuesto por Brian Terlson, Daniel Ehrenberg y Mathias Bynens
- RegExp named capture groups Propuesto por Daniel Ehrenberg y Brian Terlson
- Promise.prototype.finally() Propuesto por Jordan Harband
- Function.prototype.toString revision Propuesto por Michael Ficarra
- global Propuesto por Jordan Harband
- import() Propuesto por Domenic Denicola
- RegExp Lookbehind Assertions Propuesto por Daniel Ehrenberg
- BigInt – arbitrary precision integers Propuesto por Daniel Ehrenberg
- Class fields Propuesto por Daniel Ehrenberg y Jeff Morrison
- Optional catch binding Propuesto por Michael Ficarra
- import.meta Propuesto por Domenic Denicola
- Array.prototype.flatMap/flatten Propuesto por Brian Terlson y Michael Ficarra
Recursos
- SPEC - Proceso del comite
- TC39 and its contributions to ECMAScript
- ECMAScript, TC39, and the History of JavaScript
- TC39, ECMAScript, and the Future of JavaScript
- TC39: We want your help making the next JS—BarcelonaJS
Estados