
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 depth
dan mengembalikan array baru.
Sintaks :Array.prototype.flat(depth)
kedalaman - Nilai lalai 1 , Gunakan Infinity
untuk 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 flat
daripada depth
1.
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.fromEntries
melakukan kebalikan dari Object.entries
. Ia mengubah senarai pasangan nilai-kunci menjadi objek.
Sintaks: Object.fromEntries(iterable)
iterable: Sesuatu yang boleh diulang Array
atau Map
atau 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 catch
klausa. 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 SyntaxError
pengecualian.
// 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 Symbol
Objek:
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