ابتكارات ECMAScript

مرحبا القراء هبر. أود أن ألفت انتباهكم إلى شيء مثير للاهتمام الذي سوف تظهر قريبا ظهرت بالفعل في معيار ECMAScript. انها متاحة بالفعل. تقريبا في جميع المتصفحات وجميع الوظائف أيضا. هذا الابتكار هو مجرد غلاف سكر ويمكن حله بوسائلك الخاصة وسأريك هذا أيضًا. لكن هذا السكر سيسمح لنا بكتابة كود أقل ، لأننا نحب ذلك كثيرًا. لذلك ، يتم إضافة الوظائف الأساسية إلى المصفوفة ، وفي هذه الحالة يوجد 2 منها ، مما سيتيح لنا توسيع المصفوفات متعددة المستويات إلى مستوى أو أكثر من مستويات التداخل. نعم ، نعم ، وهذا كله كما يقولون من خارج منطقة الجزاء
اقتراح ECMAScript: Array.prototype. {Flat، flatMap}
كان هذا الاقتراح معروفًا باسم Array.prototype.flat {ten، Map} . لديها حالة المرحلة . 3 4 من TC39 أي بالفعل مرشح انتهى أعتقد أنه يستحق القليل من الهاء والتحدث عن هذا TC39 بالذات وعن المعايير ، الذين هم على دراية يمكنهم تخطي هذا التراجع. لذلك:
معايير جافا سكريبت وكيف يتم إعدادها.
ECMAScript
ECMAScript هو المعيار الذي تم تطويره وصيانته بواسطة ECMA International . تم اعتماده من قبل الجمعية العامة لـ Ecma في يونيو 1997. وبشكل أكثر تحديدًا ، ECMAScript هو معيار ECMA-262 يسمى مواصفات لغة ECMAScript. تم إنشاء المعيار بناءً على الإصدار الأصلي من JavaScript بواسطة Brendan Aich من Netscape ومترجم Microsoft JScript ، ولكنه تطور منذ ذلك الحين بشكل ملحوظ.
JavaScript عبارة عن تطبيق لمواصفات ECMAScript . هذا يعني أنه نظرًا لأن المواصفات تحتوي على مسودات جديدة أو إصدارات منشورة ، يجب على مطوري المستعرضات والأطر مثل Node.js تنفيذ وظائف جديدة بشكل متسق. للقيام بذلك ، يتم إجراء تغييرات على المحركات التي تستخدمها هذه المستعرضات والأطر لتفسير وتنفيذ شفرة JavaScript.
لماذا تحتاج إلى مواصفات؟ تستخدم المتصفحات المختلفة محركات JavaScript مختلفة ، على سبيل المثال ، V8 في Chrome و SpiderMonkey في Firefox وما إلى ذلك. عندما تكتب في JavaScript ، تتوقع أن تقوم جميع المحركات في جميع البيئات بتحليل وتنفيذ التعليمات البرمجية الخاصة بك بنفس الطريقة تمامًا. بدون مواصفات قياسية ، سيكون أي من هذه المحركات مجانيًا لتنفيذ JavaScript كما يحلو له ، ومن الواضح أن هذا ليس جيدًا.
TC39
اللجنة الفنية 39 التابعة لـ Ecma (المعروفة أيضًا باسم TC39) هي لجنة من الأشخاص الأذكياء للغاية ، وترتبط بمجموعة من المشاركين ، بالمناسبة ، ذكية أيضًا. يجتمعون جميعًا معًا في اجتماعات اللجان كل شهرين تقريبًا ومناقشة قوائم القضايا المعدة مسبقًا.
الهدف من TC39 هو الحفاظ على وتحديث مواصفات ECMAScript المذكورة سابقًا ، بعد المناقشة والإجماع. يتضمن هذا بناء جملة اللغة والدلالات والمكتبات والتقنيات ذات الصلة التي تستند إليها اللغة.
يتم تعريف هذه العملية بواسطة TC39. كل شيء يبدأ بمسودة وظيفية تقوم بتوسيع أو تغيير المواصفات. غالبًا ما تأتي هذه المسودات من مجتمعات المطورين ، أو من أعضاء TC39 أنفسهم. إذا كان الاقتراح جديرًا ، فسيحصل المشروع على حالة الاقتراح الرسمي.
بعد ذلك ، في الطريق من الفكرة إلى النشر ، يمر الاقتراح بعدة مراحل محددة. يتم ترقيمها من صفر إلى أربعة مبرمجين من الذكور :
[“Strawman”, “Proposal”, “Draft”, “Candidat”, “Finished”]
يتطلب الانتقال إلى أي خطوة تالية موافقة TC39. إذا وصل الاقتراح إلى المرحلة 4 ، فمن المتوقع أن يتم إدراجه في الإصدار التالي المنشور رسميًا لمواصفات ECMA-262 ، ونتيجة لذلك ، سوف يظهر في بيئة تقوم بتشغيل JavaScript. يمكنك معرفة المزيد حول هذه العملية من المستند نفسه .
يمكن الاطلاع على جميع المقترحات الحالية لمقدمات المعيار هنا على جيثب
حسنا ، الآن دعنا نذهب أبعد من ذلك ...
Array.prototype.flat
إرجاع الأسلوب flat () صفيف جديد ،
var newArray = arr.flat(depth);
حيث تم "رفع" كل العناصر المتداخلة تحت المصفوفات بشكل متكرر إلى مستوى العمق المحدد.
مثال:
const arr1 = [1, 2, [3, 4]]; arr1.flat();
هناك أيضا آثار جانبية ، فإنه يزيل عناصر مجموعة غير محددة
مثال:
const arr4 = [1, 2, , 4, 5]; arr4.flat();
عنوان تفعل ذلك بنفسك
نحن نستخدم الحد و concat
مثال:
const arr1 = [1,2,3,[1,2,3,4, [2,3,4]]]; function flattenDeep(arr1) { return arr1.reduce((acc, val) => Array.isArray(val) ? acc.concat(flattenDeep(val)) : acc.concat(val), []); } flattenDeep(arr1);
Array.prototype.flatMap
تقوم طريقة flatMap () أولاً بتطبيق دالة على كل عنصر ، ثم تقوم بتحويل النتيجة إلى بنية مسطحة وتضعها في صفيف جديد. هذا مماثل لوظيفة الخريطة ، متبوعًا باستخدام الوظيفة المسطحة مع معامل عمق 1 ، لكن flatMap غالبًا ما تكون مفيدة لأنها تعمل بكفاءة أكبر قليلاً.
var new_array = arr.flatMap(function callback(currentValue[, index[, array]]) {
callback
- تأخذ الدالة التي تنتج عناصر صفيف جديد ثلاث وسائط:
currentValue
- العنصر الحالي currentValue
.index
(اختياري) - فهرس العنصر المراد معالجته في الصفيف.array
(اختياري) - الصفيف المراد اجتيازه.
thisArg
(اختياري) - القيمة المستخدمة كهذا عند استدعاء وظيفة رد الاتصال.
قيمة الإرجاع - مصفوفة جديدة ، كل عنصر منها ناتج عن وظيفة رد الاتصال ويتم "رفعه" إلى المستوى 1.
مثال:
[ { x: 1, y: 2 }, { x: 3, y: 4 }, { x: 5, y: 6 } ].flatMap(c => [cx, cy])
عنوان تفعل ذلك بنفسك
var arr1 = [1, 2, 3, 4]; arr1.reduce((acc, x) => acc.concat([x * 2]), []);
الخاتمة
تذكر أن هذه الوظيفة تضاف إلى اللغة لسبب ما. الأسباب التي تجعل الأشخاص الأذكياء في TC39 يقومون بتحسين جودة اللغة ، والتجريد ، وسهولة الاستخدام ، وغيرها. تعرّف على هذه الابتكارات مسبقًا ، وبحلول وقت نشرها رسميًا ودعمها في كل مكان ، يمكنك على الفور الحصول على عمل دون إضاعة الوقت. يمكنك أيضًا وضع نفسك كخبير JavaScript في مؤسستك ، بحيث تتمكن من تقديم ميزات لغة جديدة يمكنها تحسين كل من الكود والمنتج نفسه.
ملاحظة: أثناء كتابة المقال :) ، انتقل الاقتراح إلى المرحلة 4
Array.prototype.{flat,flatMap}
to stage 4، per 2019.01.29 TC39