Apa yang Baru di JavaScript ES2019

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 .

gambar

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

Source: https://habr.com/ru/post/id439532/


All Articles