ES2018: ميزات Javascript الجديدة في 2018

أصدر أصدقاؤنا من TC39 تحديثات جديدة للغة JavaScript المحبوبة لدينا.

إذا كنت ترغب في متابعة عملية الإصدارات الجديدة من قبل اللجنة ، يمكنك الوصول إلى هذا الرابط. تمر عملية الموافقة وإجراء التغيير بخمس مراحل:

  • المرحلة 0: المشرف - السماح بالمدخلات في المواصفات
  • المرحلة 1: الاقتراح - قم بعمل حالة الإضافة ؛ وصف شكل الحل ؛ تحديد التحديات المحتملة
  • المرحلة 2: المسودة - تصف بدقة بناء الجملة والدلالات باستخدام لغة محددة رسمية
  • المرحلة 3: المرشح - أشر إلى أن المزيد من التنقيح سيتطلب تعليقات من التنفيذ والمستخدمين
  • المرحلة 4: منتهية - أشر إلى أن الإضافة جاهزة للتضمين في معيار ECMAScript الرسمي

يمكن الاطلاع على مزيد من التفاصيل هنا. إذا كنت تريد معرفة المزيد حول التغييرات السابقة ، فراجع ES6 و ES7 و ES8.

لذلك دعونا نرى ما قاموا بإضافته أو تحديثه في العام الماضي:

1. الكثير من التغييرات Regex

لدينا أربعة تعديلات على regex. دعونا نراهم:

s( dotAll) علامة للتعبيرات العادية

أثناء استخدام التعبيرات العادية ، تتوقع أن .تتطابق النقطة مع حرف واحد ، لكنها ليست صحيحة دائمًا. استثناء واحد هو مع أحرف فاصل السطر:

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

الحل هو العلم الجديد (من سطر واحد):

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

يسمى RegExp مجموعات الالتقاط

هذه هي الطريقة القديمة للحصول على السنة والشهر واليوم من تاريخ:

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

وإذا كنت تعمل باستخدام تعبير عادي طويل ، فأنت تعلم مدى صعوبة تتبع المجموعات والأقواس والمؤشرات. مع مجموعة الالتقاط المسماة الجديدة ، من الممكن:

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 انظر وراء التأكيدات

هناك نسختان من تأكيدات النظر إلى الخلف: إيجابية وسلبية.

أ) موجب (؟ < = ...)

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

هذا (?<=#)foس / ز التعابير المنطقية تقول أن الكلمة يجب أن تبدأ مع # وأنها لا تساهم في سلسلة عموما يقابل (لذلك لن يحل محل # شخصية).

ب) سلبي (؟ < ! ...)

'$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.