اشياء قابل تكرار، اشيائي هستند كه ميتوان آنهارا باfor.. in حلقه زد .
از نظر فني تكرار پذيرها بايد متدSymbol.iterator را پياده سازي كنند .
ميتوان با استفاده از حلقه for..of روي عناصر رشته دور زد .
مثال ـ دور زدن روي رشته
for (const x of "W3Schools") {
  // code block to be executed
}
ميتوان از حلقهfor .. of براي تكرار روي عناصر يك آرايه استفاده كرد
مثال ـ تكرار روي عناصر آرايه
for (const x of [1,2,3,4,5]) {
  // code block to be executed
}
پروتكل تكرار كننده(iterator protocol ) نحوي توليد دنباله اي از مقادير يك شئ را تعريف ميكند.
يك شئ با پياده سازي متدnext() تبديل بيك تكرار شونده ميگردد .
متدnext() بايد يك شئ را با دو ويژگي برگشت دهد :
در جدول زير شرح دو آيتم برگشتي آمده است.
| value | مقدار برگشتي بوسيله تكراركننده اگر تكرار كامل نباشد | 
| done | اگر عمل تكرار كننده كامل باشدtrue در غير اينصورت false برگشت ميشود . | 
مثال ـ در اين تكراركننده هر گز پايان تكرار برگشت نمي شود . مقادير10,20,30,.. bdi>
// Home Made Iterable function myNumbers() { let n = 0; return { next: function() { n += 10; return {value:n, done:false}; } }; } // Create Iterable const n = myNumbers(); n.next(); // Returns 10 n.next(); // Returns 20 n.next(); // Returns 30
مشكلي كه در تكرار پذير خانگي است ، در جاوااسكريپت براي حلقه زدن با for ..of پشتيباني نمي شود.
تكرار پذير جاواسكريپت شئ است كه دارايSymbol.iterator باشد .
Symbol.iteratorتابعي است كه يك تابع next() رابرگشت ميدهد.
يك تكرار پذير ميتوا ند روي كدfor (const x of iterable) { }  در دور قرار بگيرد.
مثال ـ تكرار پذير جاوااسكريپت
// Create an Object
myNumbers = {};
// Make it Iterable
myNumbers[Symbol.iterator] = function() {
  let n = 0;
  done = false;
  return {
    next() {
      n += 10;
      if  (n == 100) {done = true}
      return {value:n, done:done};
    }
  };
اكنون ميتوان آنرا باfor .. of استفاده كرد .
for (const num of myNumbers) {
  // Any Code Here
}
متدSymbol.iterator بطور خودكار توسطfor .. of فراخوان ميشود .اما ميتوان همچنين آنرا غير خودكار يا دستي انجام داد.
مثال ـ فراخوان غير خودكارSymbol.iterator
let iterator = myNumbers[Symbol.iterator]();
while (true) {
  const result = iterator.next();
  if  (result.done) break;
  // Any Code Here
}