دليل ES2019

ECMAScript هو المعيار الذي تستند إليه JavaScript ، وغالبًا ما يتم اختصاره إلى ES. اكتشف كل شيء عن ECMAScript والميزات المضافة في ES2019

ESNext هو اسم يشير دائمًا إلى الإصدار التالي من JavaScript.

إصدار ECMAScript الحالي هوES2018. It was released in June 2018.

تاريخياً ، تم توحيد إصدارات JavaScript خلال فصل الصيف ، لذلك يمكننا توقع ذلكECMAScript 2019 to be released in summer 2019.

حتى وقت كتابة هذا التقرير ، تم إصدار ES2018 ، وESNext هو ES2019

يتم تنظيم المقترحات الخاصة بمعيار ECMAScript على مراحل. المراحل 1-3 هي حاضنة الميزات الجديدة ، ويتم الانتهاء من الميزات التي تصل إلى المرحلة 4 كجزء من المعيار الجديد

في وقت كتابة هذا التقرير ، لدينا عدد من الميزات فيStage 4. سوف أقدمهم في هذا القسم. يجب أن تقوم أحدث إصدارات المتصفحات الرئيسية بالفعل بتنفيذ معظمها.

  • Array.prototype.{flat,flatMap}
  • اختياري ربط الصيد
  • Object.fromEntries()
  • String.prototype.{trimStart,trimEnd}
  • Symbol.prototype.description
  • تحسينات JSON
  • حسن التشكيلJSON.stringify()
  • Function.prototype.toString()

بعض هذه التغييرات هي في الغالب للاستخدام الداخلي ، ولكن من الجيد أيضًا معرفة ما يجري.

هناك ميزات أخرى في المرحلة 3 ، والتي يمكن ترقيتها إلى المرحلة 4 في الأشهر القليلة المقبلة ، ويمكنك التحقق منها في مستودع GitHub هذا:https://github.com/tc39/proposals.

Array.prototype.{flat,flatMap}

flat()هي طريقة مثيل مصفوفة جديدة يمكنها إنشاء مصفوفة أحادية البعد من مصفوفة متعددة الأبعاد.

مثال:

['Dog', ['Sheep', 'Wolf']].flat()
//[ 'Dog', 'Sheep', 'Wolf' ]

بشكل افتراضي ، "يسطح" فقط حتى مستوى واحد ، ولكن يمكنك إضافة معلمة لتعيين عدد المستويات التي تريد تسوية المصفوفة إليها. اضبطه علىInfinityللحصول على مستويات غير محدودة:

['Dog', ['Sheep', ['Wolf']]].flat()
//[ 'Dog', 'Sheep', [ 'Wolf' ] ]

['Dog', ['Sheep', ['Wolf']]].flat(2)
//[ 'Dog', 'Sheep', 'Wolf' ]

['Dog', ['Sheep', ['Wolf']]].flat(Infinity)
//[ 'Dog', 'Sheep', 'Wolf' ]

إذا كنت معتادًا على JavaScriptmap()طريقة المصفوفة ، فأنت تعلم أنه باستخدامها يمكنك تنفيذ دالة على كل عنصر في المصفوفة.

flatMap()هي طريقة مثيل مصفوفة جديدة تجمعflat()معmap(). من المفيد عند استدعاء دالة تقوم بإرجاع مصفوفة في رد نداء map () ، لكنك تريد أن تكون المصفوفة الناتجة مسطحة:

['My dog', 'is awesome'].map(words => words.split(' '))
//[ [ 'My', 'dog' ], [ 'is', 'awesome' ] ]

['My dog', 'is awesome'].flatMap(words => words.split(' '))
//[ 'My', 'dog', 'is', 'awesome' ]

اختياري ربط الصيد

في بعض الأحيان ، لا نحتاج إلى وجود معلمة مرتبطة بكتلة catch الخاصة بـ try / catch.

كان علينا في السابق القيام بما يلي:

try {
  //...
} catch (e) {
  //handle error
}

حتى لو لم نضطر لاستخدامهاeلتحليل الخطأ. يمكننا الآن حذفها ببساطة:

try {
  //...
} catch {
  //handle error
}

Object.fromEntries()

الكائنات لها ملفentries()الطريقة ، منذ ذلك الحينES2017.

تقوم بإرجاع مصفوفة تحتوي على جميع خصائص الكائن ، كمصفوفة من[key, value]أزواج:

const person = { name: 'Fred', age: 87 }
Object.entries(person) // [['name', 'Fred'], ['age', 87]]

ES2019 يقدم جديدObject.fromEntries()الذي يمكنه إنشاء كائن جديد من مجموعة الخصائص هذه:

const person = { name: 'Fred', age: 87 }
const entries = Object.entries(person)
const newPerson = Object.fromEntries(entries)

person !== newPerson //true

String.prototype.{trimStart,trimEnd}

كانت هذه الميزة جزءًا من v8 / Chrome منذ ما يقرب من عام الآن ، وسيتم توحيدها في ES2019.

trimStart()

أعد سلسلة جديدة مع إزالة مسافة بيضاء من بداية السلسلة الأصلية

'Testing'.trimStart() //'Testing'
' Testing'.trimStart() //'Testing'
' Testing '.trimStart() //'Testing '
'Testing '.trimStart() //'Testing'

trimEnd()

أعد سلسلة جديدة مع إزالة مسافة بيضاء من نهاية السلسلة الأصلية

'Testing'.trimEnd() //'Testing'
' Testing'.trimEnd() //' Testing'
' Testing '.trimEnd() //' Testing'
'Testing '.trimEnd() //'Testing'

Symbol.prototype.description

يمكنك الآن استرداد وصف ملفرمزمن خلال الوصول إلىdescriptionالخاصية بدلاً من الاضطرار إلى استخدامtoString()طريقة:

const testSymbol = Symbol('Test')
testSymbol.description // 'Test'

تحسينات JSON

قبل هذا التغيير ، لم يكن مسموحًا برموز فاصل الأسطر (\ u2028) وفاصل الفقرة (\ u2029) في السلاسل التي تم تحليلها على أنهاجسون.

استخدامJSON.parse()، أدت هذه الشخصيات إلى أSyntaxErrorلكنهم الآن يحللون بشكل صحيح ، كما هو محدد في معيار JSON.

حسن التشكيلJSON.stringify()

يعمل على إصلاحJSON.stringify()الناتج عندما يعالج نقاط رمز UTF-8 البديلة (U + D800 إلى U + DFFF).

قبل هذا التغيير يدعوJSON.stringify()سيعرض حرف Unicode مشوهًا ("�").

الآن يمكن تمثيل نقاط الشفرة البديلة هذه بأمان كسلاسل باستخدامJSON.stringify()، وتحويلها مرة أخرى إلى تمثيلها الأصلي باستخدامJSON.parse().

Function.prototype.toString()

كان للدوال دائمًا طريقة مثيل تسمىtoString()التي تعيد سلسلة تحتوي على رمز الوظيفة.

قدم ES2019 تغييرًا في قيمة الإرجاع لتجنب تجريد التعليقات والأحرف الأخرى مثل المسافة البيضاء ، والتي تمثل الوظيفة تمامًا كما تم تعريفها.

إذا كان لدينا سابقًا:

function /* this is bar */ bar () {}

كان السلوك كالتالي:

bar.toString() //'function bar() {}

الآن السلوك الجديد هو:

bar.toString(); // 'function /* this is bar */ bar () {}'

المزيد من دروس js: