ES2018: Ciri-ciri baru Javascript pada tahun 2018

Rakan-rakan kami dari TC39 telah mengeluarkan kemas kini baru untuk bahasa JavaScript yang kami sayangi.

Sekiranya anda ingin mengikuti proses siaran baru oleh jawatankuasa, anda boleh mengakses pautan ini. Proses meluluskan dan membuat perubahan melalui lima peringkat:

  • Tahap 0: Strawman - Benarkan input ke dalam spesifikasi
  • Peringkat 1: Cadangan - Buat kes tambahan; Huraikan bentuk penyelesaian; Kenal pasti cabaran yang berpotensi
  • Tahap 2: Draf - Menghuraikan sintaksis dan semantik dengan tepat menggunakan bahasa spek formal
  • Tahap 3: Calon - Nyatakan bahawa penyempurnaan lebih lanjut memerlukan maklum balas dari pelaksanaan dan pengguna
  • Tahap 4: Selesai - Nyatakan bahawa penambahan siap untuk dimasukkan ke dalam standard ECMAScript rasmi

Maklumat lanjut boleh dilihat di sini. Sekiranya anda ingin mengetahui lebih lanjut mengenai perubahan sebelumnya, lihat ES6, ES7 dan ES8.

Oleh itu, mari kita lihat apa yang telah mereka tambah atau kemas kini pada tahun lalu:

1. Banyak perubahan Regex

Kami mempunyai empat pengubahsuaian untuk regex. Mari lihat mereka:

s( dotAll) bendera untuk ungkapan biasa

Semasa menggunakan ungkapan biasa, anda menjangkakan titik itu .sepadan dengan satu watak, tetapi tidak selalu benar. Satu pengecualian adalah dengan watak penamat baris:

/hello.bye/.test('hello\nbye') // prints false

Penyelesaiannya adalah bendera baru (dari garis tunggal):

/hello.bye/s.test('hello\nbye') // prints true

RegExp menamakan kumpulan tangkapan

Ini adalah cara lama untuk mendapatkan tahun, bulan, dan hari dari tarikh:

const REGEX = /([0-9]{4})-([0-9]{2})-([0-9]{2});const results = REGEX.exec('2018-07-12');console.log(results[1]); // prints 2018console.log(results[2]); // prints 07console.log(results[3]); // prints 12

Dan jika anda bekerja dengan regex panjang, anda tahu betapa sukarnya untuk mengikuti kumpulan, tanda kurung, dan indeks. Dengan kumpulan tangkapan bernama baru, ada kemungkinan untuk:

const REGEX = /(?[0-9]{4})-(?[0-9]{2})-(?[0-9]{2});const results = REGEX.exec('2018-07-12');console.log(results.groups.year); // prints 2018console.log(results.groups.month); // prints 07console.log(results.groups.day); // prints 12

RegExp Lihat di sebalik Tegasan

Terdapat dua versi pandangan di sebalik penegasan: positif dan negatif.

a) Positif (? < =…)

'$foo #foo @foo'.replace(/(?<=#)foo/g, 'XXX')// prints $foo #XXX @foo

Ini (?<=#)foo / g regex mengatakan bahawa perkataan mesti bermula dengan # dan ia tidak menyumbang kepada rentetan keseluruhan dipadankan (supaya ia tidak akan menggantikan aksara #).

b) Negatif (? < !…)

'$foo #foo @foo'.replace(/(?
    

On the contrary, this assertion guarantees that it doesn't start with #.

RegExp Unicode Property Escapes

Now we can search for characters by mentioning their Unicode character property inside of \p{}

/\p{Script=Greek}/u.test('μ') // prints true

You can check out more of the properties by clicking here.

2. Rest/Spread Properties

The rest operator (...) copies the remaining property keys that were not mentioned. Let's look at an example:

const values = {a: 1, b: 2, c: 3, d: 4};const {a, ...n} = values;console.log(a); // prints 1console.log(n); // prints {b: 2, c: 3, d: 4}

3. Promise.prototype finally

This new callback will always be executed, if catch was called or not.

fetch('//website.com/files').then(data => data.json()).catch(err => console.error(err)).finally(() => console.log('processed!'))

4. Asynchronous Iteration

Finally!

Now we can use await on our loops declarations.

for await (const line of readLines(filePath)) { console.log(line);}

And these are all the changes from this year. Let’s wait to see what they will bring us next year.

If you enjoyed this article, be sure to like it give me a lot of claps — it means the world to the writer ? And follow me if you want to read more articles about Culture, Technology, and Startups.

Flávio H. de Freitas is an Entrepreneur, Engineer, Tech lover, Dreamer and Traveler. Has worked as CTO in Brazil, Silicon Valley and Europe.