Las versiones antiguas de JS se nombran con números: ES5 (2009) y ES6 (2015).
A partir de 2016, las versiones se nombran por año: ECMAScript 2016, 2017, 2018, 2019,...
Cadena.trimStart()
Cadena.trimEnd()
Objeto.deEntradas
Encuadernación opcional
matriz.plana()
matriz.planoMap()
Array.Sort() revisado
JSON.stringify() revisado
Símbolos separadores permitidos en literales de cadena
Función revisada.toString()
Estas características son relativamente nuevas.
Los navegadores más antiguos pueden necesitar un código alternativo (Polyfill)
ES2019 agregó el método String trimStart()
a JavaScript. <p>El método trimStart()
funciona como trim()
, pero elimina los espacios en blanco sólo desde el inicio de una cuerda.
let text1 = " Hello World! ";
let text2 = text1.trimStart();
Pruébelo usted mismo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Strings</h1>
<h2>The trimStart() Method</h2>
<p id="demo"></p>
<script>
let text1 = " Hello World! ";
let text2 = text1.trimStart();
document.getElementById("demo").innerHTML =
"Length text1 = " + text1.length + "<br>Length text2 = " + text2.length;
</script>
</body>
</html>
La cadena JavaScript trimStart()
es compatible con todos los navegadores modernos desde enero de 2020:
Chrome 66 | Edge 79 | Firefox 61 | Safari 12 | Opera 50 |
Apr 2018 | Jan 2020 | Jun 2018 | Sep 2018 | May 2018 |
ES2019 agregó el método String trimEnd()
a JavaScript. <p>El método trimEnd()
funciona como trim()
, pero elimina los espacios en blanco sólo al final de una cuerda.
let text1 = " Hello World! ";
let text2 = text1.trimEnd();
Pruébelo usted mismo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Strings</h1>
<h2>The trimEnd() Method</h2>
<p id="demo"></p>
<script>
let text1 = " Hello World! ";
let text2 = text1.trimEnd();
document.getElementById("demo").innerHTML =
"Length text1 = " + text1.length + "<br>Length text2 = " + text2.length;
</script>
</body>
</html>
La cadena JavaScript trimEnd()
es compatible con todos los navegadores modernos desde enero de 2020:
Chrome 66 | Edge 79 | Firefox 61 | Safari 12 | Opera 50 |
Apr 2018 | Jan 2020 | Jun 2018 | Sep 2018 | May 2018 |
ES2019 agregó el método de objeto fromEntries()
a JavaScript. <p>El método fromEntries()
crea un objeto a partir de pares clave/valor iterables.
const fruits = [
["apples", 300],
["pears", 900],
["bananas", 500]
];
const myObj = Object.fromEntries(fruits);
Pruébelo usted mismo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Objects</h1>
<h2>The fromEntries() Method</h2>
<p>The number of pears are:</p>
<p id="demo"></p>
<script>
const fruits = [
["apples", 300],
["pears", 900],
["bananas", 500]
];
const myObj = Object.fromEntries(fruits);
document.getElementById("demo").innerHTML = myObj.pears;
</script>
</body>
</html>
El objeto JavaScript fromEntries()
es compatible con todos los navegadores modernos desde enero de 2020:
Chrome 73 | Edge 79 | Firefox 63 | Safari 12.1 | Opera 60 |
Mar 2019 | Jan 2020 | Oct 2018 | Mar 2019 | Apr 2019 |
Desde ES2019 puedes omitir el parámetro catch si no lo necesitas:.
Antes de 2019:
try {
// code
} catch (err) {
// code
}
Después de 2019:
try {
// code
} catch {
// code
}
El enlace de captura opcional es compatible con todos los navegadores modernos desde enero de 2020:
Chrome 66 | Edge 79 | Firefox 58 | Safari 11.1 | Opera 53 |
Apr 2018 | Jan 2020 | Jan 2018 | Mar 2018 | May 2018 |
ES2019 agregó el método Array flat()
a JavaScript.
El método flat()
crea una nueva matriz aplanando una matriz anidada.
const myArr = [[1,2],[3,4],[5,6]];
const newArr = myArr.flat();
Pruébelo usted mismo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<h2>The flat() Method</h2>
<p id="demo"></p>
<script>
const myArr = [[1,2],[3,4],[5,6]];
const newArr = myArr.flat();
document.getElementById("demo").innerHTML = newArr;
</script>
</body>
</html>
JavaScript Array flat()
es compatible con todos los navegadores modernos desde enero de 2020:
Chrome 69 | Edge 79 | Firefox 62 | Safari 12 | Opera 56 |
Sep 2018 | Jan 2020 | Sep 2018 | Sep 2018 | Sep 2018 |
ES2019 agregó el método Array flatMap()
a JavaScript.
El método flatMap()
primero asigna todos los elementos de una matriz y luego crea una nueva matriz aplanando la matriz.
const myArr = [1, 2, 3, 4, 5, 6];
const newArr = myArr.flatMap((x) => x * 2);
Pruébelo usted mismo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Arrays</h1>
<h2>The flatMap() Method</h2>
<p id="demo"></p>
<script>
const myArr = [1, 2, 3, 4, 5,6];
const newArr = myArr.flatMap((x) => x * 2);
document.getElementById("demo").innerHTML = newArr;
</script>
</body>
</html>
ES2019 revisó el método Array sort()
.
Antes de 2019, la especificación permitía algoritmos de clasificación inestables como QuickSort.
Después de ES2019, los navegadores deben utilizar un algoritmo de clasificación estable:
Al ordenar elementos según un valor, los elementos deben mantener su posición relativa con respecto a otros elementos con el mismo valor.
const myArr = [
{name:"X00",price:100 },
{name:"X01",price:100 },
{name:"X02",price:100 },
{name:"X03",price:100 },
{name:"X04",price:110 },
{name:"X05",price:110 },
{name:"X06",price:110 },
{name:"X07",price:110 }
];
Pruébelo usted mismo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Stable Sort</h1>
<p>From ES2019, browsers must use a stable sorting algorithm.</p>
<p>When sorting elements on a key, the elements must keep their relative position to other objects with the same key.</p>
<p id="demo"></p>
<script>
const myArr = [
{name:"X00",price:100 },
{name:"X01",price:100 },
{name:"X02",price:100 },
{name:"X03",price:100 },
{name:"X04",price:110 },
{name:"X05",price:110 },
{name:"X06",price:110 },
{name:"X07",price:110 },
{name:"X08",price:120 },
{name:"X09",price:120 },
{name:"X10",price:120 },
{name:"X11",price:120 },
{name:"X12",price:130 },
{name:"X13",price:130 },
{name:"X14",price:130 },
{name:"X15",price:130 },
{name:"X16",price:140 },
{name:"X17",price:140 },
{name:"X18",price:140 },
{name:"X19",price:140 }
];
myArr.sort( (p1, p2) => {
if (p1.price < p2.price) return -1;
if (p1.price > p2.price) return 1;
return 0;
});
let txt = "";
myArr.forEach(myFunction);
function myFunction(value) {
txt += value.name + " " + value.price + "<br>";
}
document.getElementById("demo").innerHTML = txt;
</script>
</body>
</html>
En el ejemplo anterior, al ordenar por precio, no se permite que el resultado salga con los nombres en otra posición relativa como como esto:
X01 100
X03 100
X00 100
X03 100
X05 110
X04 110
X06 110
X07 110
ES2019 revisó el método JSON stringify()
.
Antes de 2019, JSON no podía codificar caracteres codificados con \.
let text = JSON.stringify("\u26D4");
Pruébelo usted mismo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript JSON</h1>
<h2>Revised stringify()</h2>
<p id="demo"></p>
<script>
let text = JSON.stringify("\u26D4");
document.getElementById("demo").innerHTML = JSON.parse(text);
</script>
</body>
</html>
Antes de ES2019, se usaba JSON.stringify()
JSON en puntos de código UTF-8 (U+D800 a U+DFFF) devolvió caracteres Unicode rotos como ���.
Después de esta revisión, las cadenas con puntos de código UTF-8 se convierten de forma segura con JSON.stringify()
, y volver al original usando JSON.parse()
. Símbolos separadores
<p>Ahora se permiten separadores de línea y símbolos de separador de párrafo (\u2028 y \u2029) en cadenas literales.
Antes de 2019, se trataban como terminadores de línea y generaban excepciones de error:
// This is valid in ES2019:
let text = "\u2028";
Pruébelo usted mismo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Strings</h1>
<p>From ES2019, line and paragraph separator symbols (\u2028 and \u2029) are allowed in string literals:</p>
<p id="demo"></p>
<script>
let text = "\u2028";
document.getElementById("demo").innerHTML = text;
</script>
</body>
</html>
Ahora, JavaScript y JSON tienen reglas iguales.
Antes de ES2019:
text=JSON.parse('"\u2028"') se analizaría como ''.
text='"\u2028"' daría error de sintaxis.
ES2019 revisó el método Función toString()
.
El método toString()
devuelve una cadena que representa el código fuente de una función.
A partir de 2019, toString() debe devolver el código fuente de la función, incluidos los comentarios, espacios y detalles de sintaxis.
Antes de 2019, diferentes navegadores devolvían diferentes variantes de la función (como sin comentarios ni espacios). A partir de 2019, la función debería devolverse exactamente como está escrita.
function myFunction(p1, p2) {
return p1 * p2;
}
Pruébelo usted mismo →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Functions</h1>
<h2>The toString() Method</h2>
<p>The toString() method returns the function as a string:</p>
<p id="demo"></p>
<script>
function myFunction(a, b) {
return a * b;
}
document.getElementById("demo").innerHTML = myFunction.toString();
</script>
</body>
</html>