سألني أحد الأشخاص مؤخرًا، هل خصائص كائن JavaScript بالضرورة غير مرتبة ولا يمكن التنبؤ بها؟
قد يجيب المطورون الذين تعرضوا مبكرًا لـ JavaScript على أن Object.keys() أو for...in تُرجع ترتيبًا غير متوقع لخصائص الكائن. ولكن هل لا يزال هذا هو الحال؟
كما قد تتوقع، هناك الآن قواعد يجب اتباعها.
بدءًا من ECMAScript 2020، تتبع كل من Object.keys و...in وObject.getOwnPropertyNames وReflect.ownKeys نفس ترتيب المواصفات. وهم:
فهرس الصفيف هو مفتاح خاصية ذو قيمة سلسلة وهو عبارة عن سلسلة رقمية أساسية. والسلسلة الرقمية الأساسية هي تمثيل سلسلة لرقم سيتم إنتاجه بواسطة ToString، أو السلسلة "-0". على سبيل المثال، "012" هو ليس سلسلة رقمية أساسية، ولكن "12" هو كذلك.
يضيف الكود أعلاه نقطة المعرفة لحلقة الحدث. نظرًا لأن setTimeout هي مهمة ماكرو غير متزامنة، لم تتم إضافة الخاصية c إلى obj عند إخراج console.log.
خاصية الرمز هي نفس خاصية السلسلة، بترتيب زمني تصاعدي لإنشاء الخاصية. لكن Object.keys، لـ...in، لا يمكن لأساليب Object.getOwnPropertyNames الحصول على خصائص رمز الكائن، ويمكن لـ Reflect.ownKeys وObject.getOwnPropertySymbols الحصول على خصائص الرمز.
عندما تكون مفاتيح خصائص الكائن عبارة عن مزيج من الأنواع المذكورة أعلاه، تتم إضافة مفاتيح الأعداد الصحيحة غير السالبة للكائن (القابلة للإحصاء وغير القابلة للإحصاء) أولاً إلى المصفوفة بترتيب تصاعدي، ثم تتم إضافة مفاتيح السلسلة بترتيب الإدراج. وأخيرًا، تتم إضافة مفاتيح الرموز بترتيب الإدراج.
ولكن إذا كنت تعتمد بشدة على ترتيب الإدراج، فإن Map يضمن لك ذلك.
إذا وجدت هذا مفيدًا، فيرجى التفكير في الاشتراك في النشرة الإخبارية الخاصة بي للحصول على المزيد من المقالات والأدوات المفيدة حول تطوير الويب. شكرا على القراءة!
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3