Apa yang baru dalam JavaScript ES2019

Ramai di antara kita tahu bahawa ada prosedur standard untuk siaran terbaru Javascript dan sebuah jawatankuasa di belakangnya. Dalam siaran ini, saya akan menerangkan tentang siapa yang membuat panggilan terakhir mengenai spesifikasi baru, apa prosedur untuknya, dan apa yang baru di ES2019.

Spesifikasi bahasa yang mendorong JavaScript disebut ECMAScript. Terdapat pasukan di belakang yang dipanggil Jawatankuasa Teknikal 39 [TC39] yang mengkaji setiap spesifikasi sebelum mengadopsi .

Setiap perubahan melalui proses dengan tahap kematangan.

  • Tahap 0: Idea / Strawman
  • Peringkat 1: Cadangan
  • Peringkat 2: Draf
  • Tahap 3: Calon
  • Tahap 4: Selesai / Diluluskan

Ciri yang mencapai Tahap 4 kemungkinan akan menjadi sebahagian daripada spesifikasi bahasa.

Mari selami perkara-perkara yang baru ditambahkan ke dalam spesifikasi di bawah ES2019.

Array.prototaip. {Flat, flatMap}

Array.prototype.flat()dicadangkan untuk meratakan array secara rekursif hingga yang ditentukan depthdan mengembalikan array baru.

Sintaks :Array.prototype.flat(depth)

kedalaman - Nilai lalai 1 , Gunakan Infinityuntuk meratakan semua tatasusunan 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 meratakan hasilnya menjadi susunan baru. Ia serupa dengan operasi peta diikuti dengan flatdaripada depth1.

Sintaks: Array.prototype.flatMap(callback)

panggilan balik:function yang menghasilkan unsur 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.fromEntriesmelakukan kebalikan dari Object.entries. Ia mengubah senarai pasangan nilai-kunci menjadi objek.

Sintaks: Object.fromEntries(iterable)

iterable: Sesuatu yang boleh diulang Arrayatau Mapatau objek yang melaksanakan protokol berulang

const records = [['name','Mathew'], ['age', 32]]; const obj = Object.fromEntries(records); > { name: 'Mathew', age: 32} Object.entries(obj); > [['name','Mathew'], ['age', 32]];

String.prototaip. {TrimStart, trimEnd}

trimStart()membuang ruang kosong dari awal rentetan dan trimEnd()membuang ruang kosong dari akhir rentetan.

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

Pengikat Tangkap Pilihan

Sebelum spesifikasi baru, diperlukan pengecualian pemboleh ubah yang mengikat catchklausa. ES2019 menjadikannya pilihan.

// Before try { ... } catch(error) { ... } // After try { ... } catch { ... }

Ciri ini berguna apabila anda ingin mengabaikan kesalahan sepenuhnya. Amalan terbaik adalah mempertimbangkan untuk menangani kesalahan.

Terdapat kes di mana anda mengetahui kemungkinan kesalahan yang boleh mencetuskan operasi. Anda boleh mengabaikan pengendalian blok tangkapan.

JSON ⊂ ECMASkrip

Simbol pemisah garis (U + 2028) dan pemisah perenggan (U + 2029) kini dibenarkan dalam literal rentetan. Sebelum ini, ini dianggap sebagai penghentian talian dan mengakibatkan SyntaxErrorpengecualian.

// Produces invalid string before ES2019 eval('"\u2028"'); // Valid in ES2019 eval('"\u2028"');

JSON.stringify yang terbentuk dengan baik

Daripada titik kod pengganti yang tidak berpasangan yang menghasilkan unit kod UTF-16 tunggal , ES10 mewakili mereka dengan urutan pelarian JSON.

JSON.stringify('\uD800'); > '" "' JSON.stringify('\uD800'); > '"\\ud800"'

Function.prototype.toString

.toString() kini mengembalikan potongan teks kod sumber yang tepat, termasuk ruang kosong dan komen.

function /* a comment */ foo () {} // Previously: foo.toString(); > 'function foo() {}' ^ no comment ^ no space // Now: foo.toString(); > 'function /* comment */ foo () {}'

Symbol.prototype.description

Harta baca sahaja yang mengembalikan perihalan pilihan SymbolObjek:

Symbol('desc').toString(); > "Symbol(desc)" Symbol('desc').description; > "desc" Symbol('').description; > "" Symbol().description; > undefined

Kesimpulannya

TC39 menyimpan semua spesifikasi yang akan datang yang berada di tahap> 1 proses di sini. Sebagai pembangun, penting untuk memerhatikan apa yang berlaku di sekitar. Terdapat banyak lagi perkara menarik yang terdapat dalam kaedah dan kaedah statik & persendirian di kelas, Legacy RegE x, dan lain-lain. Ketahui semua perkara baru yang ada di peringkat cadangan di sini.

code = coffee + developer

Berikut adalah beberapa topik yang lebih menarik:

  • Gambaran ringkas Simbol JavaScript
  • Cara menggunakan strategi percabangan git
  • Pengenalan Git Merge dan Git Rebase: Apa yang Mereka Lakukan dan Kapan Menggunakannya