Symbol.iterator

من موسوعة حسوب
مراجعة 15:40، 28 يناير 2018 بواسطة عبد اللطيف ايمش (نقاش | مساهمات) (استبدال النص - '\[\[تصنيف:(.*)\]\]' ب'{{SUBPAGENAME}}')
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

الرمز المعروف Symbol.iterator يُحدِّد ما هو iterator التابع للكائن، وهو يستخدم من حلقة for...of.

سمات الخاصية Symbol.iterator
قابلة للكتابة لا
قابلة للإحصاء لا
قابلة للضبط لا

الوصف

عند الحاجة إلى المرور (iterate) على كائن (مثل في بداية حلقة التكرار for...of)، فستستدعى الدالة ‎@@iterator دون وسائط، وسيستخدم iterator المُعاد للحصول على القيم التي سنمرّ عليها في حلقة التكرار.

بعض أنواع الكائنات المُضمَّنة في اللغة تحتوي على iterator افتراضي، بينما لا يملكه غيرها (الكائن Object مثلًا)؛ الدالة ‎@@iterator الموجودة في الكائنات المُضمَّنة في اللغة هي:

أمثلة

تعريف iterables

يمكننا إنشاء iterables خاصة بنا كما يلي:

var myIterable = {}
myIterable[Symbol.iterator] = function* () {
    yield 1;
    yield 2;
    yield 3;
};
[...myIterable] // [1, 2, 3]

iterable غير مُعرَّف جيدًا

إذا لم تُعِد الدالة ‎@@iterator كائن iterator، فهذا يسمى non-well-formed iterable؛ واستعمالها سيؤدي إلى أخطاء في زمن التنفيذ أو إلى سلوكٍ مليء بالعلل:

var nonWellFormedIterable = {}
nonWellFormedIterable[Symbol.iterator] = () => 1
[...nonWellFormedIterable] // TypeError: [] is not a function

دعم المتصفحات

الميزة Chrome Firefox Internet Explorer Opera Safari
الدعم الأساسي 43 36 غير مدعومة 30 10

على النقيض من متصفح IE، يدعم متصفح Edge هذه الميزة.

مصادر ومواصفات