Symbol.iterator
< JavaScript | Symbol
الرمز المعروف Symbol.iterator
يُحدِّد ما هو iterator التابع للكائن، وهو يستخدم من حلقة for...of
.
سمات الخاصية Symbol.iterator | |
---|---|
قابلة للكتابة | لا |
قابلة للإحصاء | لا |
قابلة للضبط | لا |
الوصف
عند الحاجة إلى المرور (iterate) على كائن (مثل في بداية حلقة التكرار for...of
)، فستستدعى الدالة @@iterator
دون وسائط، وسيستخدم iterator المُعاد للحصول على القيم التي سنمرّ عليها في حلقة التكرار.
بعض أنواع الكائنات المُضمَّنة في اللغة تحتوي على iterator افتراضي، بينما لا يملكه غيرها (الكائن Object
مثلًا)؛ الدالة @@iterator
الموجودة في الكائنات المُضمَّنة في اللغة هي:
Array.prototype[@@iterator]()
TypedArray.prototype[@@iterator]()
String.prototype[@@iterator]()
Map.prototype[@@iterator]()
Set.prototype[@@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 هذه الميزة.
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2015 (6th Edition).