Ada prosedur standar untuk versi terbaru 
Javascript dan ada seluruh komite di belakangnya. Dalam artikel ini, saya akan berbicara tentang siapa yang membuat keputusan tentang spesifikasi baru, apa prosedur untuk itu, dan apa yang baru di 
ES2019 .

Spesifikasi bahasa yang mengontrol JavaScript disebut 
ECMAScript . Ada kelompok yang disebut Komite Teknis 
39 [TC39] yang 
meninjau setiap spesifikasi sebelum diadopsi.
Setiap perubahan terjadi secara bertahap:
- Tahap 0: Gagasan
- Tahap 1: Penawaran
- Tahap 2: Draf
- Tahap 3: Kandidat
- Tahap 4: Penyelesaian / Persetujuan
Fungsi yang mencapai tahap 4 kemungkinan akan menjadi bagian dari spesifikasi bahasa.
Pertimbangkan apa yang ditambahkan ke spesifikasi sesuai dengan ES2019.
Array.prototype. {Flat, flatMap}
Array.prototype.flat () memungkinkan Anda untuk secara halus 
memperhalus array ke kedalaman tertentu dan mengembalikan array baru.
Sintaks: 
Array.prototype.flat (mendalam)mendalam - nilai default adalah 1, gunakan 
Infinity untuk memuluskan semua array bersarang.
const numbers = [1, 2, [3, 4, [5, 6]]]; // Considers default depth of 1 numbers.flat(); > [1, 2, 3, 4, [5, 6]] // With depth of 2 numbers.flat(2); > [1, 2, 3, 4, 5, 6] // Executes two flat operations numbers.flat().flat(); > [1, 2, 3, 4, 5, 6] // Flattens recursively until the array contains no nested arrays numbers.flat(Infinity) > [1, 2, 3, 4, 5, 6] 
Array.prototype.flatMap () memetakan setiap elemen menggunakan fungsi pemetaan dan menyelaraskan hasilnya ke array baru. Ini identik dengan operasi 
peta , diikuti oleh kedalaman 
datar 1.
Sintaks: 
Array.prototype.flatMap (panggilan balik)callback: 
fungsi yang menghasilkan elemen array baru.
 const numbers = [1, 2, 3]; numbers.map(x => [x * 2]); > [[2], [4], [6]] numbers.flatMap(x => [x * 2]); > [2, 4, 6] 
Object.fromEntries
Object.fromEntries melakukan kebalikan dari Object.entries. Itu mengubah daftar pasangan kunci-nilai menjadi objek.
Sintaks: 
Object.fromEntries (iterable)iterasi: Iterasi sebagai objek 
Array atau 
Peta yang mengimplementasikan 
protokol iterable .
 const records = [['name','Mathew'], ['age', 32]]; const obj = Object.fromEntries(records); > { name: 'Mathew', age: 32} Object.entries(obj); > [['name','Mathew'], ['age', 32]]; 
String.prototype. {TrimStart, trimEnd}
trimStart () menghapus spasi di awal baris, dan 
trimEnd () menghapus spasi di akhir baris.
 const greeting = ` Hello Javascript! `; greeting.length; > 19 greeting = greeting.trimStart(); > 'Hello Javascript! ' greeting.length; > 18 greeting = 'Hello World! '; greeting.length; > 15 greeting = greeting.trimEnd(); > 'Hello World!' greeting.length; > 12 
Binding Tangkap Opsional
Sebelum spesifikasi baru, itu harus memiliki variabel pengecualian terikat ke pernyataan 
penangkapan . ES2019 menjadikannya opsional.
 // Before try { ... } catch(error) { ... } // After try { ... } catch { ... } 
Fitur ini berguna jika Anda ingin mengabaikan kesalahan sepenuhnya. 
Praktik terbaik adalah mempertimbangkan penanganan kesalahan.Ada kalanya Anda mengetahui kemungkinan kesalahan yang mungkin berhasil saat melakukan operasi. Dan Anda bisa mengabaikan penanganan tangkapan.
JSON â ECMAScript
Karakter pemisah garis (U + 2028) dan karakter pemisah paragraf (U + 2029) sekarang diizinkan dalam string literal. Sebelumnya, mereka dianggap sebagai terminator string dan 
melemparkan pengecualian 
SyntaxError .
 // Produces invalid string before ES2019 eval('"\u2028"'); // Valid in ES2019 eval('"\u2028"'); 
JSON.stringify terbentuk dengan baik
Alih-alih poin kode pengganti tidak berpasangan yang mengarah ke unit kode 
UTF-16 tunggal, ES10 mewakili mereka menggunakan urutan pelarian JSON.
 JSON.stringify('\uD800'); > '" "' JSON.stringify('\uD800'); > '"\\ud800"' 
Function.prototype.toString
.toString () sekarang mengembalikan potongan kode sumber yang tepat, termasuk spasi dan komentar.
 function /* a comment */ foo () {} // Previously: foo.toString(); > 'function foo() {}' ^ no comment ^ no space // Now: foo.toString(); > 'function /* comment */ foo () {}' 
Symbol.prototype.description
Properti baca-saja yang mengembalikan deskripsi opsional objek 
simbol :
 Symbol('desc').toString(); > "Symbol(desc)" Symbol('desc').description; > "desc" Symbol('').description; > "" Symbol().description; > undefined 
Kesimpulan
Ada banyak hal menarik lainnya, seperti metode dan bidang statis dan pribadi di kelas, Legacy RegEx, dll. Penting bagi pengembang untuk memantau munculnya teknologi baru, meningkatkan yang lama dan menggunakannya dalam pekerjaan.
Ini akan berguna untuk membaca versi sebelumnya: 
ES2015 ES2016 ES2017 ES2018