Gamle JS-versioner er navngivet med numre: ES5 (2009) og ES6 (2015).
Fra 2016 er versionerne navngivet efter år: ECMAScript 2016, 2017, 2018, 2019, ...
String.trimStart()
String.trimEnd()
Object.fromEntries
Valgfri fangebinding
Array.flat()
Array.flatMap()
Revideret Array.Sort()
Revideret JSON.stringify()
Separatorsymboler tilladt i strengbogstaver
Revideret Function.toString()
Disse funktioner er relativt nye.
Ældre browsere kan have brug for en alternativ kode (Polyfill)
ES2019 føjede strengmetoden trimStart()
til JavaScript. <p>trimStart()
-metoden fungerer som trim()
, men fjerner kun mellemrum fra starten af en snor.
let text1 = " Hello World! ";
let text2 = text1.trimStart();
Prøv det selv →
<!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>
JavaScript-strengen trimStart()
er understøttet i alle moderne browsere siden januar 2020:
Chrome 66 | Edge 79 | Firefox 61 | Safari 12 | Opera 50 |
Apr 2018 | Jan 2020 | Jun 2018 | Sep 2018 | May 2018 |
ES2019 føjede strengmetoden trimEnd()
til JavaScript. <p>trimEnd()
-metoden fungerer som trim()
, men fjerner kun mellemrum fra slutningen af en snor.
let text1 = " Hello World! ";
let text2 = text1.trimEnd();
Prøv det selv →
<!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>
JavaScript-strengen trimEnd()
er understøttet i alle moderne browsere siden januar 2020:
Chrome 66 | Edge 79 | Firefox 61 | Safari 12 | Opera 50 |
Apr 2018 | Jan 2020 | Jun 2018 | Sep 2018 | May 2018 |
ES2019 føjede objektmetoden fromEntries()
til JavaScript. <p>Metoden fromEntries()
opretter et objekt fra iterable nøgle/værdipar.
const fruits = [
["apples", 300],
["pears", 900],
["bananas", 500]
];
const myObj = Object.fromEntries(fruits);
Prøv det selv →
<!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>
JavaScript-objekt fromEntries()
er understøttet i alle moderne browsere siden januar 2020:
Chrome 73 | Edge 79 | Firefox 63 | Safari 12.1 | Opera 60 |
Mar 2019 | Jan 2020 | Oct 2018 | Mar 2019 | Apr 2019 |
Fra ES2019 kan du udelade catch-parameteren, hvis du ikke har brug for den:.
Før 2019:
try {
// code
} catch (err) {
// code
}
Efter 2019:
try {
// code
} catch {
// code
}
Valgfri catch-binding er understøttet i alle moderne browsere siden januar 2020:
Chrome 66 | Edge 79 | Firefox 58 | Safari 11.1 | Opera 53 |
Apr 2018 | Jan 2020 | Jan 2018 | Mar 2018 | May 2018 |
ES2019 tilføjede Array flat()
metoden til JavaScript.
Metoden flat()
opretter en ny matrix ved at fladlægge en indlejret matrix.
const myArr = [[1,2],[3,4],[5,6]];
const newArr = myArr.flat();
Prøv det selv →
<!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()
er understøttet i alle moderne browsere siden januar 2020:
Chrome 69 | Edge 79 | Firefox 62 | Safari 12 | Opera 56 |
Sep 2018 | Jan 2020 | Sep 2018 | Sep 2018 | Sep 2018 |
ES2019 tilføjede Array flatMap()
metoden til JavaScript.
Metoden flatMap()
kortlægger først alle elementer i et array og opretter derefter et nyt array ved at udjævne arrayet.
const myArr = [1, 2, 3, 4, 5, 6];
const newArr = myArr.flatMap((x) => x * 2);
Prøv det selv →
<!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 reviderede Array sort()
-metoden.
Før 2019 tillod specifikationen ustabile sorteringsalgoritmer som QuickSort.
Efter ES2019 skal browsere bruge en stabil sorteringsalgoritme:
Når du sorterer elementer på en værdi, skal elementerne bevare deres relative position i forhold til andre elementer med samme værdi.
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 }
];
Prøv det selv →
<!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>
I eksemplet ovenfor, når der sorteres på pris, må resultatet ikke komme ud med navnene i en anden relativ position som f.eks. sådan her:
X01 100
X03 100
X00 100
X03 100
X05 110
X04 110
X06 110
X07 110
ES2019 reviderede JSON stringify()
-metoden.
Før 2019 kunne JSON ikke stringify tegn kodet med \.
let text = JSON.stringify("\u26D4");
Prøv det selv →
<!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>
Før ES2019, ved brug af JSON.stringify()
JSON på UTF-8 kodepunkter (U+D800 til U+DFFF) returnerede ødelagte Unicode-tegn som ���.
Efter denne revision konverteres strenge med UTF-8 kodepunkter sikkert med JSON.stringify()
, og tilbage til originalen ved hjælp af JSON.parse()
.
Før 2019 blev disse behandlet som linjeterminatorer og resulterede i fejlundtagelser:
// This is valid in ES2019:
let text = "\u2028";
Prøv det selv →
<!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>
Nu har JavaScript og JSON lige regler.
Før ES2019:
text=JSON.parse('"\u2028"') ville parse til ''.
text='"\u2028"' ville give syntaksfejl.
ES2019 reviderede metoden Function toString()
.
Metoden toString()
returnerer en streng, der repræsenterer kildekoden til en funktion.
Fra 2019 skal toString() returnere kildekoden for funktionen inklusive kommentarer, mellemrum og syntaksdetaljer.
Før 2019 returnerede forskellige browsere forskellige varianter af funktionen (som uden kommentarer og mellemrum). Fra 2019 skal funktionen returneres præcis som den er skrevet.
function myFunction(p1, p2) {
return p1 * p2;
}
Prøv det selv →
<!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>