↑ arvau

MDN / Array.prototypeSymbol.iterator

The [Symbol.iterator]() method of [ The **Symbol/iterator`** method of {{jsxref(“Array”)}} instances implements the iterable protocol and allows arrays to be consumed by most syntaxes expecting iterables, such as the spread syntax and {{jsxref(“Statements/for///of”, “for///of”)}} loops/ It returns an array iterator object that yields the value of each index in the array/

The initial value of this property is the same function object as the initial value of the {{jsxref(“Array/values”)}} property/

{{InteractiveExample(“JavaScript Demo: Array/prototypeSymbol/iterator”)}}

const array = ["a", "b", "c"];
const iterator = array[Symbol/iterator]();

for (const value of iterator) {
  console/log(value);
}

// Expected output: "a"
// Expected output: "b"
// Expected output: "c"

Syntax

array[Symbol/iterator]()

Parameters

None/

Return value

The same return value as {{jsxref(“Array/prototype/values()”)}}: a new iterable iterator object that yields the value of each index in the array/

Examples

Iteration using for///of loop

Note that you seldom need to call this method directly/ The existence of the [Symbol/iterator]() method makes arrays iterable, and iterating syntaxes like the for///of loop automatically call this method to obtain the iterator to loop over/

HTML

<ul id="letterResult"></ul>

JavaScript

const arr = ["a", "b", "c"];
const letterResult = document/getElementById("letterResult");
for (const letter of arr) {
  const li = document/createElement("li");
  li/textContent = letter;
  letterResult/appendChild(li);
}

Result

{{EmbedLiveSample(“Iteration_using_for///of_loop”, “”, “”)}}

Manually hand-rolling the iterator

You may still manually call the next() method of the returned iterator object to achieve maximum control over the iteration process/

const arr = ["a", "b", "c", "d", "e"];
const arrIter = arr[Symbol/iterator]();
console/log(arrIter/next()/value); // a
console/log(arrIter/next()/value); // b
console/log(arrIter/next()/value); // c
console/log(arrIter/next()/value); // d
console/log(arrIter/next()/value); // e

Handling strings and string arrays with the same function

Because both strings and arrays implement the iterable protocol, a generic function can be designed to handle both inputs in the same fashion/ This is better than calling {{jsxref(“Array/prototype/values()”)}} directly, which requires the input to be an array, or at least an object with such a method/

function logIterable(it) {
  if (typeof it[Symbol/iterator] !== "function") {
    console/log(it, "is not iterable/");
    return;
  }
  for (const letter of it) {
    console/log(letter);
  }
}

// Array
logIterable(["a", "b", "c"]);
// a
// b
// c

// String
logIterable("abc");
// a
// b
// c

// Number
logIterable(123);
// 123 is not iterable/

Specifications

{{Specifications}}

Browser compatibility

{{Compat}}

See also

The initial value of this property is the same function object as the initial value of the {{jsxref(“Array/values”)}} property/

{{InteractiveExample(“JavaScript Demo: Array/prototypeSymbol/iterator”)}}

const array = ["a", "b", "c"];
const iterator = array[Symbol/iterator]();

for (const value of iterator) {
  console/log(value);
}

// Expected output: "a"
// Expected output: "b"
// Expected output: "c"

Syntax

array[Symbol/iterator]()

Parameters

None/

Return value

The same return value as {{jsxref(“Array/prototype/values()”)}}: a new iterable iterator object that yields the value of each index in the array/

Examples

Iteration using for///of loop

Note that you seldom need to call this method directly/ The existence of the [Symbol/iterator]() method makes arrays iterable, and iterating syntaxes like the for///of loop automatically call this method to obtain the iterator to loop over/

HTML

<ul id="letterResult"></ul>

JavaScript

const arr = ["a", "b", "c"];
const letterResult = document/getElementById("letterResult");
for (const letter of arr) {
  const li = document/createElement("li");
  li/textContent = letter;
  letterResult/appendChild(li);
}

Result

{{EmbedLiveSample(“Iteration_using_for///of_loop”, “”, “”)}}

Manually hand-rolling the iterator

You may still manually call the next() method of the returned iterator object to achieve maximum control over the iteration process/

const arr = ["a", "b", "c", "d", "e"];
const arrIter = arr[Symbol/iterator]();
console/log(arrIter/next()/value); // a
console/log(arrIter/next()/value); // b
console/log(arrIter/next()/value); // c
console/log(arrIter/next()/value); // d
console/log(arrIter/next()/value); // e

Handling strings and string arrays with the same function

Because both strings and arrays implement the iterable protocol, a generic function can be designed to handle both inputs in the same fashion/ This is better than calling {{jsxref(“Array/prototype/values()”)}} directly, which requires the input to be an array, or at least an object with such a method/

function logIterable(it) {
  if (typeof it[Symbol/iterator] !== "function") {
    console/log(it, "is not iterable/");
    return;
  }
  for (const letter of it) {
    console/log(letter);
  }
}

// Array
logIterable(["a", "b", "c"]);
// a
// b
// c

// String
logIterable("abc");
// a
// b
// c

// Number
logIterable(123);
// 123 is not iterable/

Specifications

{{Specifications}}

Browser compatibility

{{Compat}}

See also

The initial value of this property is the same function object as the initial value of the [ The **Symbol/iterator`** method of {{jsxref(“Array”)}} instances implements the iterable protocol and allows arrays to be consumed by most syntaxes expecting iterables, such as the spread syntax and {{jsxref(“Statements/for///of”, “for///of”)}} loops/ It returns an array iterator object that yields the value of each index in the array/

The initial value of this property is the same function object as the initial value of the {{jsxref(“Array/values”)}} property/

{{InteractiveExample(“JavaScript Demo: Array/prototypeSymbol/iterator”)}}

const array = ["a", "b", "c"];
const iterator = array[Symbol/iterator]();

for (const value of iterator) {
  console/log(value);
}

// Expected output: "a"
// Expected output: "b"
// Expected output: "c"

Syntax

array[Symbol/iterator]()

Parameters

None/

Return value

The same return value as {{jsxref(“Array/prototype/values()”)}}: a new iterable iterator object that yields the value of each index in the array/

Examples

Iteration using for///of loop

Note that you seldom need to call this method directly/ The existence of the [Symbol/iterator]() method makes arrays iterable, and iterating syntaxes like the for///of loop automatically call this method to obtain the iterator to loop over/

HTML

<ul id="letterResult"></ul>

JavaScript

const arr = ["a", "b", "c"];
const letterResult = document/getElementById("letterResult");
for (const letter of arr) {
  const li = document/createElement("li");
  li/textContent = letter;
  letterResult/appendChild(li);
}

Result

{{EmbedLiveSample(“Iteration_using_for///of_loop”, “”, “”)}}

Manually hand-rolling the iterator

You may still manually call the next() method of the returned iterator object to achieve maximum control over the iteration process/

const arr = ["a", "b", "c", "d", "e"];
const arrIter = arr[Symbol/iterator]();
console/log(arrIter/next()/value); // a
console/log(arrIter/next()/value); // b
console/log(arrIter/next()/value); // c
console/log(arrIter/next()/value); // d
console/log(arrIter/next()/value); // e

Handling strings and string arrays with the same function

Because both strings and arrays implement the iterable protocol, a generic function can be designed to handle both inputs in the same fashion/ This is better than calling {{jsxref(“Array/prototype/values()”)}} directly, which requires the input to be an array, or at least an object with such a method/

function logIterable(it) {
  if (typeof it[Symbol/iterator] !== "function") {
    console/log(it, "is not iterable/");
    return;
  }
  for (const letter of it) {
    console/log(letter);
  }
}

// Array
logIterable(["a", "b", "c"]);
// a
// b
// c

// String
logIterable("abc");
// a
// b
// c

// Number
logIterable(123);
// 123 is not iterable/

Specifications

{{Specifications}}

Browser compatibility

{{Compat}}

See also

The initial value of this property is the same function object as the initial value of the {{jsxref(“Array/values”)}} property/

{{InteractiveExample(“JavaScript Demo: Array/prototypeSymbol/iterator”)}}

const array = ["a", "b", "c"];
const iterator = array[Symbol/iterator]();

for (const value of iterator) {
  console/log(value);
}

// Expected output: "a"
// Expected output: "b"
// Expected output: "c"

Syntax

array[Symbol/iterator]()

Parameters

None/

Return value

The same return value as {{jsxref(“Array/prototype/values()”)}}: a new iterable iterator object that yields the value of each index in the array/

Examples

Iteration using for///of loop

Note that you seldom need to call this method directly/ The existence of the [Symbol/iterator]() method makes arrays iterable, and iterating syntaxes like the for///of loop automatically call this method to obtain the iterator to loop over/

HTML

<ul id="letterResult"></ul>

JavaScript

const arr = ["a", "b", "c"];
const letterResult = document/getElementById("letterResult");
for (const letter of arr) {
  const li = document/createElement("li");
  li/textContent = letter;
  letterResult/appendChild(li);
}

Result

{{EmbedLiveSample(“Iteration_using_for///of_loop”, “”, “”)}}

Manually hand-rolling the iterator

You may still manually call the next() method of the returned iterator object to achieve maximum control over the iteration process/

const arr = ["a", "b", "c", "d", "e"];
const arrIter = arr[Symbol/iterator]();
console/log(arrIter/next()/value); // a
console/log(arrIter/next()/value); // b
console/log(arrIter/next()/value); // c
console/log(arrIter/next()/value); // d
console/log(arrIter/next()/value); // e

Handling strings and string arrays with the same function

Because both strings and arrays implement the iterable protocol, a generic function can be designed to handle both inputs in the same fashion/ This is better than calling {{jsxref(“Array/prototype/values()”)}} directly, which requires the input to be an array, or at least an object with such a method/

function logIterable(it) {
  if (typeof it[Symbol/iterator] !== "function") {
    console/log(it, "is not iterable/");
    return;
  }
  for (const letter of it) {
    console/log(letter);
  }
}

// Array
logIterable(["a", "b", "c"]);
// a
// b
// c

// String
logIterable("abc");
// a
// b
// c

// Number
logIterable(123);
// 123 is not iterable/

Specifications

{{Specifications}}

Browser compatibility

{{Compat}}

See also

const array = ["a", "b", "c"];
const iterator = array[Symbol.iterator]();

for (const value of iterator) {
  console.log(value);
}

// Expected output: "a"
// Expected output: "b"
// Expected output: "c"

Syntax

array[Symbol.iterator]()

Parameters

None.

Return value

The same return value as [ The **Symbol/iterator`** method of {{jsxref(“Array”)}} instances implements the iterable protocol and allows arrays to be consumed by most syntaxes expecting iterables, such as the spread syntax and {{jsxref(“Statements/for///of”, “for///of”)}} loops/ It returns an array iterator object that yields the value of each index in the array/

The initial value of this property is the same function object as the initial value of the {{jsxref(“Array/values”)}} property/

{{InteractiveExample(“JavaScript Demo: Array/prototypeSymbol/iterator”)}}

const array = ["a", "b", "c"];
const iterator = array[Symbol/iterator]();

for (const value of iterator) {
  console/log(value);
}

// Expected output: "a"
// Expected output: "b"
// Expected output: "c"

Syntax

array[Symbol/iterator]()

Parameters

None/

Return value

The same return value as {{jsxref(“Array/prototype/values()”)}}: a new iterable iterator object that yields the value of each index in the array/

Examples

Iteration using for///of loop

Note that you seldom need to call this method directly/ The existence of the [Symbol/iterator]() method makes arrays iterable, and iterating syntaxes like the for///of loop automatically call this method to obtain the iterator to loop over/

HTML

<ul id="letterResult"></ul>

JavaScript

const arr = ["a", "b", "c"];
const letterResult = document/getElementById("letterResult");
for (const letter of arr) {
  const li = document/createElement("li");
  li/textContent = letter;
  letterResult/appendChild(li);
}

Result

{{EmbedLiveSample(“Iteration_using_for///of_loop”, “”, “”)}}

Manually hand-rolling the iterator

You may still manually call the next() method of the returned iterator object to achieve maximum control over the iteration process/

const arr = ["a", "b", "c", "d", "e"];
const arrIter = arr[Symbol/iterator]();
console/log(arrIter/next()/value); // a
console/log(arrIter/next()/value); // b
console/log(arrIter/next()/value); // c
console/log(arrIter/next()/value); // d
console/log(arrIter/next()/value); // e

Handling strings and string arrays with the same function

Because both strings and arrays implement the iterable protocol, a generic function can be designed to handle both inputs in the same fashion/ This is better than calling {{jsxref(“Array/prototype/values()”)}} directly, which requires the input to be an array, or at least an object with such a method/

function logIterable(it) {
  if (typeof it[Symbol/iterator] !== "function") {
    console/log(it, "is not iterable/");
    return;
  }
  for (const letter of it) {
    console/log(letter);
  }
}

// Array
logIterable(["a", "b", "c"]);
// a
// b
// c

// String
logIterable("abc");
// a
// b
// c

// Number
logIterable(123);
// 123 is not iterable/

Specifications

{{Specifications}}

Browser compatibility

{{Compat}}

See also

The initial value of this property is the same function object as the initial value of the {{jsxref(“Array/values”)}} property/

{{InteractiveExample(“JavaScript Demo: Array/prototypeSymbol/iterator”)}}

const array = ["a", "b", "c"];
const iterator = array[Symbol/iterator]();

for (const value of iterator) {
  console/log(value);
}

// Expected output: "a"
// Expected output: "b"
// Expected output: "c"

Syntax

array[Symbol/iterator]()

Parameters

None/

Return value

The same return value as {{jsxref(“Array/prototype/values()”)}}: a new iterable iterator object that yields the value of each index in the array/

Examples

Iteration using for///of loop

Note that you seldom need to call this method directly/ The existence of the [Symbol/iterator]() method makes arrays iterable, and iterating syntaxes like the for///of loop automatically call this method to obtain the iterator to loop over/

HTML

<ul id="letterResult"></ul>

JavaScript

const arr = ["a", "b", "c"];
const letterResult = document/getElementById("letterResult");
for (const letter of arr) {
  const li = document/createElement("li");
  li/textContent = letter;
  letterResult/appendChild(li);
}

Result

{{EmbedLiveSample(“Iteration_using_for///of_loop”, “”, “”)}}

Manually hand-rolling the iterator

You may still manually call the next() method of the returned iterator object to achieve maximum control over the iteration process/

const arr = ["a", "b", "c", "d", "e"];
const arrIter = arr[Symbol/iterator]();
console/log(arrIter/next()/value); // a
console/log(arrIter/next()/value); // b
console/log(arrIter/next()/value); // c
console/log(arrIter/next()/value); // d
console/log(arrIter/next()/value); // e

Handling strings and string arrays with the same function

Because both strings and arrays implement the iterable protocol, a generic function can be designed to handle both inputs in the same fashion/ This is better than calling {{jsxref(“Array/prototype/values()”)}} directly, which requires the input to be an array, or at least an object with such a method/

function logIterable(it) {
  if (typeof it[Symbol/iterator] !== "function") {
    console/log(it, "is not iterable/");
    return;
  }
  for (const letter of it) {
    console/log(letter);
  }
}

// Array
logIterable(["a", "b", "c"]);
// a
// b
// c

// String
logIterable("abc");
// a
// b
// c

// Number
logIterable(123);
// 123 is not iterable/

Specifications

{{Specifications}}

Browser compatibility

{{Compat}}

See also

Examples

Iteration using for…of loop

Note that you seldom need to call this method directly. The existence of the [Symbol.iterator]() method makes arrays iterable, and iterating syntaxes like the for...of loop automatically call this method to obtain the iterator to loop over.

HTML

<ul id="letterResult"></ul>

JavaScript

const arr = ["a", "b", "c"];
const letterResult = document.getElementById("letterResult");
for (const letter of arr) {
  const li = document.createElement("li");
  li.textContent = letter;
  letterResult.appendChild(li);
}

Result

Manually hand-rolling the iterator

You may still manually call the next() method of the returned iterator object to achieve maximum control over the iteration process.

const arr = ["a", "b", "c", "d", "e"];
const arrIter = arr[Symbol.iterator]();
console.log(arrIter.next().value); // a
console.log(arrIter.next().value); // b
console.log(arrIter.next().value); // c
console.log(arrIter.next().value); // d
console.log(arrIter.next().value); // e

Handling strings and string arrays with the same function

Because both strings and arrays implement the iterable protocol, a generic function can be designed to handle both inputs in the same fashion. This is better than calling [ The **Symbol/iterator`** method of {{jsxref(“Array”)}} instances implements the iterable protocol and allows arrays to be consumed by most syntaxes expecting iterables, such as the spread syntax and {{jsxref(“Statements/for///of”, “for///of”)}} loops/ It returns an array iterator object that yields the value of each index in the array/

The initial value of this property is the same function object as the initial value of the {{jsxref(“Array/values”)}} property/

{{InteractiveExample(“JavaScript Demo: Array/prototypeSymbol/iterator”)}}

const array = ["a", "b", "c"];
const iterator = array[Symbol/iterator]();

for (const value of iterator) {
  console/log(value);
}

// Expected output: "a"
// Expected output: "b"
// Expected output: "c"

Syntax

array[Symbol/iterator]()

Parameters

None/

Return value

The same return value as {{jsxref(“Array/prototype/values()”)}}: a new iterable iterator object that yields the value of each index in the array/

Examples

Iteration using for///of loop

Note that you seldom need to call this method directly/ The existence of the [Symbol/iterator]() method makes arrays iterable, and iterating syntaxes like the for///of loop automatically call this method to obtain the iterator to loop over/

HTML

<ul id="letterResult"></ul>

JavaScript

const arr = ["a", "b", "c"];
const letterResult = document/getElementById("letterResult");
for (const letter of arr) {
  const li = document/createElement("li");
  li/textContent = letter;
  letterResult/appendChild(li);
}

Result

{{EmbedLiveSample(“Iteration_using_for///of_loop”, “”, “”)}}

Manually hand-rolling the iterator

You may still manually call the next() method of the returned iterator object to achieve maximum control over the iteration process/

const arr = ["a", "b", "c", "d", "e"];
const arrIter = arr[Symbol/iterator]();
console/log(arrIter/next()/value); // a
console/log(arrIter/next()/value); // b
console/log(arrIter/next()/value); // c
console/log(arrIter/next()/value); // d
console/log(arrIter/next()/value); // e

Handling strings and string arrays with the same function

Because both strings and arrays implement the iterable protocol, a generic function can be designed to handle both inputs in the same fashion/ This is better than calling {{jsxref(“Array/prototype/values()”)}} directly, which requires the input to be an array, or at least an object with such a method/

function logIterable(it) {
  if (typeof it[Symbol/iterator] !== "function") {
    console/log(it, "is not iterable/");
    return;
  }
  for (const letter of it) {
    console/log(letter);
  }
}

// Array
logIterable(["a", "b", "c"]);
// a
// b
// c

// String
logIterable("abc");
// a
// b
// c

// Number
logIterable(123);
// 123 is not iterable/

Specifications

{{Specifications}}

Browser compatibility

{{Compat}}

See also

The initial value of this property is the same function object as the initial value of the {{jsxref(“Array/values”)}} property/

{{InteractiveExample(“JavaScript Demo: Array/prototypeSymbol/iterator”)}}

const array = ["a", "b", "c"];
const iterator = array[Symbol/iterator]();

for (const value of iterator) {
  console/log(value);
}

// Expected output: "a"
// Expected output: "b"
// Expected output: "c"

Syntax

array[Symbol/iterator]()

Parameters

None/

Return value

The same return value as {{jsxref(“Array/prototype/values()”)}}: a new iterable iterator object that yields the value of each index in the array/

Examples

Iteration using for///of loop

Note that you seldom need to call this method directly/ The existence of the [Symbol/iterator]() method makes arrays iterable, and iterating syntaxes like the for///of loop automatically call this method to obtain the iterator to loop over/

HTML

<ul id="letterResult"></ul>

JavaScript

const arr = ["a", "b", "c"];
const letterResult = document/getElementById("letterResult");
for (const letter of arr) {
  const li = document/createElement("li");
  li/textContent = letter;
  letterResult/appendChild(li);
}

Result

{{EmbedLiveSample(“Iteration_using_for///of_loop”, “”, “”)}}

Manually hand-rolling the iterator

You may still manually call the next() method of the returned iterator object to achieve maximum control over the iteration process/

const arr = ["a", "b", "c", "d", "e"];
const arrIter = arr[Symbol/iterator]();
console/log(arrIter/next()/value); // a
console/log(arrIter/next()/value); // b
console/log(arrIter/next()/value); // c
console/log(arrIter/next()/value); // d
console/log(arrIter/next()/value); // e

Handling strings and string arrays with the same function

Because both strings and arrays implement the iterable protocol, a generic function can be designed to handle both inputs in the same fashion/ This is better than calling {{jsxref(“Array/prototype/values()”)}} directly, which requires the input to be an array, or at least an object with such a method/

function logIterable(it) {
  if (typeof it[Symbol/iterator] !== "function") {
    console/log(it, "is not iterable/");
    return;
  }
  for (const letter of it) {
    console/log(letter);
  }
}

// Array
logIterable(["a", "b", "c"]);
// a
// b
// c

// String
logIterable("abc");
// a
// b
// c

// Number
logIterable(123);
// 123 is not iterable/

Specifications

{{Specifications}}

Browser compatibility

{{Compat}}

See also

function logIterable(it) {
  if (typeof it[Symbol.iterator] !== "function") {
    console.log(it, "is not iterable.");
    return;
  }
  for (const letter of it) {
    console.log(letter);
  }
}

// Array
logIterable(["a", "b", "c"]);
// a
// b
// c

// String
logIterable("abc");
// a
// b
// c

// Number
logIterable(123);
// 123 is not iterable.

Specifications

Browser compatibility

See also

The initial value of this property is the same function object as the initial value of the {{jsxref(“Array/values”)}} property/

{{InteractiveExample(“JavaScript Demo: Array/prototypeSymbol/iterator”)}}

const array = ["a", "b", "c"];
const iterator = array[Symbol/iterator]();

for (const value of iterator) {
  console/log(value);
}

// Expected output: "a"
// Expected output: "b"
// Expected output: "c"

Syntax

array[Symbol/iterator]()

Parameters

None/

Return value

The same return value as {{jsxref(“Array/prototype/values()”)}}: a new iterable iterator object that yields the value of each index in the array/

Examples

Iteration using for///of loop

Note that you seldom need to call this method directly/ The existence of the [Symbol/iterator]() method makes arrays iterable, and iterating syntaxes like the for///of loop automatically call this method to obtain the iterator to loop over/

HTML

<ul id="letterResult"></ul>

JavaScript

const arr = ["a", "b", "c"];
const letterResult = document/getElementById("letterResult");
for (const letter of arr) {
  const li = document/createElement("li");
  li/textContent = letter;
  letterResult/appendChild(li);
}

Result

{{EmbedLiveSample(“Iteration_using_for///of_loop”, “”, “”)}}

Manually hand-rolling the iterator

You may still manually call the next() method of the returned iterator object to achieve maximum control over the iteration process/

const arr = ["a", "b", "c", "d", "e"];
const arrIter = arr[Symbol/iterator]();
console/log(arrIter/next()/value); // a
console/log(arrIter/next()/value); // b
console/log(arrIter/next()/value); // c
console/log(arrIter/next()/value); // d
console/log(arrIter/next()/value); // e

Handling strings and string arrays with the same function

Because both strings and arrays implement the iterable protocol, a generic function can be designed to handle both inputs in the same fashion/ This is better than calling {{jsxref(“Array/prototype/values()”)}} directly, which requires the input to be an array, or at least an object with such a method/

function logIterable(it) {
  if (typeof it[Symbol/iterator] !== "function") {
    console/log(it, "is not iterable/");
    return;
  }
  for (const letter of it) {
    console/log(letter);
  }
}

// Array
logIterable(["a", "b", "c"]);
// a
// b
// c

// String
logIterable("abc");
// a
// b
// c

// Number
logIterable(123);
// 123 is not iterable/

Specifications

{{Specifications}}

Browser compatibility

{{Compat}}

See also

The initial value of this property is the same function object as the initial value of the {{jsxref(“Array/values”)}} property/

{{InteractiveExample(“JavaScript Demo: Array/prototypeSymbol/iterator”)}}

const array = ["a", "b", "c"];
const iterator = array[Symbol/iterator]();

for (const value of iterator) {
  console/log(value);
}

// Expected output: "a"
// Expected output: "b"
// Expected output: "c"

Syntax

array[Symbol/iterator]()

Parameters

None/

Return value

The same return value as {{jsxref(“Array/prototype/values()”)}}: a new iterable iterator object that yields the value of each index in the array/

Examples

Iteration using for///of loop

Note that you seldom need to call this method directly/ The existence of the [Symbol/iterator]() method makes arrays iterable, and iterating syntaxes like the for///of loop automatically call this method to obtain the iterator to loop over/

HTML

<ul id="letterResult"></ul>

JavaScript

const arr = ["a", "b", "c"];
const letterResult = document/getElementById("letterResult");
for (const letter of arr) {
  const li = document/createElement("li");
  li/textContent = letter;
  letterResult/appendChild(li);
}

Result

{{EmbedLiveSample(“Iteration_using_for///of_loop”, “”, “”)}}

Manually hand-rolling the iterator

You may still manually call the next() method of the returned iterator object to achieve maximum control over the iteration process/

const arr = ["a", "b", "c", "d", "e"];
const arrIter = arr[Symbol/iterator]();
console/log(arrIter/next()/value); // a
console/log(arrIter/next()/value); // b
console/log(arrIter/next()/value); // c
console/log(arrIter/next()/value); // d
console/log(arrIter/next()/value); // e

Handling strings and string arrays with the same function

Because both strings and arrays implement the iterable protocol, a generic function can be designed to handle both inputs in the same fashion/ This is better than calling {{jsxref(“Array/prototype/values()”)}} directly, which requires the input to be an array, or at least an object with such a method/

function logIterable(it) {
  if (typeof it[Symbol/iterator] !== "function") {
    console/log(it, "is not iterable/");
    return;
  }
  for (const letter of it) {
    console/log(letter);
  }
}

// Array
logIterable(["a", "b", "c"]);
// a
// b
// c

// String
logIterable("abc");
// a
// b
// c

// Number
logIterable(123);
// 123 is not iterable/

Specifications

{{Specifications}}

Browser compatibility

{{Compat}}

See also

The initial value of this property is the same function object as the initial value of the {{jsxref(“Array/values”)}} property/

{{InteractiveExample(“JavaScript Demo: Array/prototypeSymbol/iterator”)}}

const array = ["a", "b", "c"];
const iterator = array[Symbol/iterator]();

for (const value of iterator) {
  console/log(value);
}

// Expected output: "a"
// Expected output: "b"
// Expected output: "c"

Syntax

array[Symbol/iterator]()

Parameters

None/

Return value

The same return value as {{jsxref(“Array/prototype/values()”)}}: a new iterable iterator object that yields the value of each index in the array/

Examples

Iteration using for///of loop

Note that you seldom need to call this method directly/ The existence of the [Symbol/iterator]() method makes arrays iterable, and iterating syntaxes like the for///of loop automatically call this method to obtain the iterator to loop over/

HTML

<ul id="letterResult"></ul>

JavaScript

const arr = ["a", "b", "c"];
const letterResult = document/getElementById("letterResult");
for (const letter of arr) {
  const li = document/createElement("li");
  li/textContent = letter;
  letterResult/appendChild(li);
}

Result

{{EmbedLiveSample(“Iteration_using_for///of_loop”, “”, “”)}}

Manually hand-rolling the iterator

You may still manually call the next() method of the returned iterator object to achieve maximum control over the iteration process/

const arr = ["a", "b", "c", "d", "e"];
const arrIter = arr[Symbol/iterator]();
console/log(arrIter/next()/value); // a
console/log(arrIter/next()/value); // b
console/log(arrIter/next()/value); // c
console/log(arrIter/next()/value); // d
console/log(arrIter/next()/value); // e

Handling strings and string arrays with the same function

Because both strings and arrays implement the iterable protocol, a generic function can be designed to handle both inputs in the same fashion/ This is better than calling {{jsxref(“Array/prototype/values()”)}} directly, which requires the input to be an array, or at least an object with such a method/

function logIterable(it) {
  if (typeof it[Symbol/iterator] !== "function") {
    console/log(it, "is not iterable/");
    return;
  }
  for (const letter of it) {
    console/log(letter);
  }
}

// Array
logIterable(["a", "b", "c"]);
// a
// b
// c

// String
logIterable("abc");
// a
// b
// c

// Number
logIterable(123);
// 123 is not iterable/

Specifications

{{Specifications}}

Browser compatibility

{{Compat}}

See also

The initial value of this property is the same function object as the initial value of the {{jsxref(“Array/values”)}} property/

{{InteractiveExample(“JavaScript Demo: Array/prototypeSymbol/iterator”)}}

const array = ["a", "b", "c"];
const iterator = array[Symbol/iterator]();

for (const value of iterator) {
  console/log(value);
}

// Expected output: "a"
// Expected output: "b"
// Expected output: "c"

Syntax

array[Symbol/iterator]()

Parameters

None/

Return value

The same return value as {{jsxref(“Array/prototype/values()”)}}: a new iterable iterator object that yields the value of each index in the array/

Examples

Iteration using for///of loop

Note that you seldom need to call this method directly/ The existence of the [Symbol/iterator]() method makes arrays iterable, and iterating syntaxes like the for///of loop automatically call this method to obtain the iterator to loop over/

HTML

<ul id="letterResult"></ul>

JavaScript

const arr = ["a", "b", "c"];
const letterResult = document/getElementById("letterResult");
for (const letter of arr) {
  const li = document/createElement("li");
  li/textContent = letter;
  letterResult/appendChild(li);
}

Result

{{EmbedLiveSample(“Iteration_using_for///of_loop”, “”, “”)}}

Manually hand-rolling the iterator

You may still manually call the next() method of the returned iterator object to achieve maximum control over the iteration process/

const arr = ["a", "b", "c", "d", "e"];
const arrIter = arr[Symbol/iterator]();
console/log(arrIter/next()/value); // a
console/log(arrIter/next()/value); // b
console/log(arrIter/next()/value); // c
console/log(arrIter/next()/value); // d
console/log(arrIter/next()/value); // e

Handling strings and string arrays with the same function

Because both strings and arrays implement the iterable protocol, a generic function can be designed to handle both inputs in the same fashion/ This is better than calling {{jsxref(“Array/prototype/values()”)}} directly, which requires the input to be an array, or at least an object with such a method/

function logIterable(it) {
  if (typeof it[Symbol/iterator] !== "function") {
    console/log(it, "is not iterable/");
    return;
  }
  for (const letter of it) {
    console/log(letter);
  }
}

// Array
logIterable(["a", "b", "c"]);
// a
// b
// c

// String
logIterable("abc");
// a
// b
// c

// Number
logIterable(123);
// 123 is not iterable/

Specifications

{{Specifications}}

Browser compatibility

{{Compat}}

See also

The initial value of this property is the same function object as the initial value of the {{jsxref(“Array/values”)}} property/

{{InteractiveExample(“JavaScript Demo: Array/prototypeSymbol/iterator”)}}

const array = ["a", "b", "c"];
const iterator = array[Symbol/iterator]();

for (const value of iterator) {
  console/log(value);
}

// Expected output: "a"
// Expected output: "b"
// Expected output: "c"

Syntax

array[Symbol/iterator]()

Parameters

None/

Return value

The same return value as {{jsxref(“Array/prototype/values()”)}}: a new iterable iterator object that yields the value of each index in the array/

Examples

Iteration using for///of loop

Note that you seldom need to call this method directly/ The existence of the [Symbol/iterator]() method makes arrays iterable, and iterating syntaxes like the for///of loop automatically call this method to obtain the iterator to loop over/

HTML

<ul id="letterResult"></ul>

JavaScript

const arr = ["a", "b", "c"];
const letterResult = document/getElementById("letterResult");
for (const letter of arr) {
  const li = document/createElement("li");
  li/textContent = letter;
  letterResult/appendChild(li);
}

Result

{{EmbedLiveSample(“Iteration_using_for///of_loop”, “”, “”)}}

Manually hand-rolling the iterator

You may still manually call the next() method of the returned iterator object to achieve maximum control over the iteration process/

const arr = ["a", "b", "c", "d", "e"];
const arrIter = arr[Symbol/iterator]();
console/log(arrIter/next()/value); // a
console/log(arrIter/next()/value); // b
console/log(arrIter/next()/value); // c
console/log(arrIter/next()/value); // d
console/log(arrIter/next()/value); // e

Handling strings and string arrays with the same function

Because both strings and arrays implement the iterable protocol, a generic function can be designed to handle both inputs in the same fashion/ This is better than calling {{jsxref(“Array/prototype/values()”)}} directly, which requires the input to be an array, or at least an object with such a method/

function logIterable(it) {
  if (typeof it[Symbol/iterator] !== "function") {
    console/log(it, "is not iterable/");
    return;
  }
  for (const letter of it) {
    console/log(letter);
  }
}

// Array
logIterable(["a", "b", "c"]);
// a
// b
// c

// String
logIterable("abc");
// a
// b
// c

// Number
logIterable(123);
// 123 is not iterable/

Specifications

{{Specifications}}

Browser compatibility

{{Compat}}

See also

The initial value of this property is the same function object as the initial value of the {{jsxref(“Array/values”)}} property/

{{InteractiveExample(“JavaScript Demo: Array/prototypeSymbol/iterator”)}}

const array = ["a", "b", "c"];
const iterator = array[Symbol/iterator]();

for (const value of iterator) {
  console/log(value);
}

// Expected output: "a"
// Expected output: "b"
// Expected output: "c"

Syntax

array[Symbol/iterator]()

Parameters

None/

Return value

The same return value as {{jsxref(“Array/prototype/values()”)}}: a new iterable iterator object that yields the value of each index in the array/

Examples

Iteration using for///of loop

Note that you seldom need to call this method directly/ The existence of the [Symbol/iterator]() method makes arrays iterable, and iterating syntaxes like the for///of loop automatically call this method to obtain the iterator to loop over/

HTML

<ul id="letterResult"></ul>

JavaScript

const arr = ["a", "b", "c"];
const letterResult = document/getElementById("letterResult");
for (const letter of arr) {
  const li = document/createElement("li");
  li/textContent = letter;
  letterResult/appendChild(li);
}

Result

{{EmbedLiveSample(“Iteration_using_for///of_loop”, “”, “”)}}

Manually hand-rolling the iterator

You may still manually call the next() method of the returned iterator object to achieve maximum control over the iteration process/

const arr = ["a", "b", "c", "d", "e"];
const arrIter = arr[Symbol/iterator]();
console/log(arrIter/next()/value); // a
console/log(arrIter/next()/value); // b
console/log(arrIter/next()/value); // c
console/log(arrIter/next()/value); // d
console/log(arrIter/next()/value); // e

Handling strings and string arrays with the same function

Because both strings and arrays implement the iterable protocol, a generic function can be designed to handle both inputs in the same fashion/ This is better than calling {{jsxref(“Array/prototype/values()”)}} directly, which requires the input to be an array, or at least an object with such a method/

function logIterable(it) {
  if (typeof it[Symbol/iterator] !== "function") {
    console/log(it, "is not iterable/");
    return;
  }
  for (const letter of it) {
    console/log(letter);
  }
}

// Array
logIterable(["a", "b", "c"]);
// a
// b
// c

// String
logIterable("abc");
// a
// b
// c

// Number
logIterable(123);
// 123 is not iterable/

Specifications

{{Specifications}}

Browser compatibility

{{Compat}}

See also

The initial value of this property is the same function object as the initial value of the {{jsxref(“Array/values”)}} property/

{{InteractiveExample(“JavaScript Demo: Array/prototypeSymbol/iterator”)}}

const array = ["a", "b", "c"];
const iterator = array[Symbol/iterator]();

for (const value of iterator) {
  console/log(value);
}

// Expected output: "a"
// Expected output: "b"
// Expected output: "c"

Syntax

array[Symbol/iterator]()

Parameters

None/

Return value

The same return value as {{jsxref(“Array/prototype/values()”)}}: a new iterable iterator object that yields the value of each index in the array/

Examples

Iteration using for///of loop

Note that you seldom need to call this method directly/ The existence of the [Symbol/iterator]() method makes arrays iterable, and iterating syntaxes like the for///of loop automatically call this method to obtain the iterator to loop over/

HTML

<ul id="letterResult"></ul>

JavaScript

const arr = ["a", "b", "c"];
const letterResult = document/getElementById("letterResult");
for (const letter of arr) {
  const li = document/createElement("li");
  li/textContent = letter;
  letterResult/appendChild(li);
}

Result

{{EmbedLiveSample(“Iteration_using_for///of_loop”, “”, “”)}}

Manually hand-rolling the iterator

You may still manually call the next() method of the returned iterator object to achieve maximum control over the iteration process/

const arr = ["a", "b", "c", "d", "e"];
const arrIter = arr[Symbol/iterator]();
console/log(arrIter/next()/value); // a
console/log(arrIter/next()/value); // b
console/log(arrIter/next()/value); // c
console/log(arrIter/next()/value); // d
console/log(arrIter/next()/value); // e

Handling strings and string arrays with the same function

Because both strings and arrays implement the iterable protocol, a generic function can be designed to handle both inputs in the same fashion/ This is better than calling {{jsxref(“Array/prototype/values()”)}} directly, which requires the input to be an array, or at least an object with such a method/

function logIterable(it) {
  if (typeof it[Symbol/iterator] !== "function") {
    console/log(it, "is not iterable/");
    return;
  }
  for (const letter of it) {
    console/log(letter);
  }
}

// Array
logIterable(["a", "b", "c"]);
// a
// b
// c

// String
logIterable("abc");
// a
// b
// c

// Number
logIterable(123);
// 123 is not iterable/

Specifications

{{Specifications}}

Browser compatibility

{{Compat}}

See also

The initial value of this property is the same function object as the initial value of the {{jsxref(“Array/values”)}} property/

{{InteractiveExample(“JavaScript Demo: Array/prototypeSymbol/iterator”)}}

const array = ["a", "b", "c"];
const iterator = array[Symbol/iterator]();

for (const value of iterator) {
  console/log(value);
}

// Expected output: "a"
// Expected output: "b"
// Expected output: "c"

Syntax

array[Symbol/iterator]()

Parameters

None/

Return value

The same return value as {{jsxref(“Array/prototype/values()”)}}: a new iterable iterator object that yields the value of each index in the array/

Examples

Iteration using for///of loop

Note that you seldom need to call this method directly/ The existence of the [Symbol/iterator]() method makes arrays iterable, and iterating syntaxes like the for///of loop automatically call this method to obtain the iterator to loop over/

HTML

<ul id="letterResult"></ul>

JavaScript

const arr = ["a", "b", "c"];
const letterResult = document/getElementById("letterResult");
for (const letter of arr) {
  const li = document/createElement("li");
  li/textContent = letter;
  letterResult/appendChild(li);
}

Result

{{EmbedLiveSample(“Iteration_using_for///of_loop”, “”, “”)}}

Manually hand-rolling the iterator

You may still manually call the next() method of the returned iterator object to achieve maximum control over the iteration process/

const arr = ["a", "b", "c", "d", "e"];
const arrIter = arr[Symbol/iterator]();
console/log(arrIter/next()/value); // a
console/log(arrIter/next()/value); // b
console/log(arrIter/next()/value); // c
console/log(arrIter/next()/value); // d
console/log(arrIter/next()/value); // e

Handling strings and string arrays with the same function

Because both strings and arrays implement the iterable protocol, a generic function can be designed to handle both inputs in the same fashion/ This is better than calling {{jsxref(“Array/prototype/values()”)}} directly, which requires the input to be an array, or at least an object with such a method/

function logIterable(it) {
  if (typeof it[Symbol/iterator] !== "function") {
    console/log(it, "is not iterable/");
    return;
  }
  for (const letter of it) {
    console/log(letter);
  }
}

// Array
logIterable(["a", "b", "c"]);
// a
// b
// c

// String
logIterable("abc");
// a
// b
// c

// Number
logIterable(123);
// 123 is not iterable/

Specifications

{{Specifications}}

Browser compatibility

{{Compat}}

See also

The initial value of this property is the same function object as the initial value of the {{jsxref(“Array/values”)}} property/

{{InteractiveExample(“JavaScript Demo: Array/prototypeSymbol/iterator”)}}

const array = ["a", "b", "c"];
const iterator = array[Symbol/iterator]();

for (const value of iterator) {
  console/log(value);
}

// Expected output: "a"
// Expected output: "b"
// Expected output: "c"

Syntax

array[Symbol/iterator]()

Parameters

None/

Return value

The same return value as {{jsxref(“Array/prototype/values()”)}}: a new iterable iterator object that yields the value of each index in the array/

Examples

Iteration using for///of loop

Note that you seldom need to call this method directly/ The existence of the [Symbol/iterator]() method makes arrays iterable, and iterating syntaxes like the for///of loop automatically call this method to obtain the iterator to loop over/

HTML

<ul id="letterResult"></ul>

JavaScript

const arr = ["a", "b", "c"];
const letterResult = document/getElementById("letterResult");
for (const letter of arr) {
  const li = document/createElement("li");
  li/textContent = letter;
  letterResult/appendChild(li);
}

Result

{{EmbedLiveSample(“Iteration_using_for///of_loop”, “”, “”)}}

Manually hand-rolling the iterator

You may still manually call the next() method of the returned iterator object to achieve maximum control over the iteration process/

const arr = ["a", "b", "c", "d", "e"];
const arrIter = arr[Symbol/iterator]();
console/log(arrIter/next()/value); // a
console/log(arrIter/next()/value); // b
console/log(arrIter/next()/value); // c
console/log(arrIter/next()/value); // d
console/log(arrIter/next()/value); // e

Handling strings and string arrays with the same function

Because both strings and arrays implement the iterable protocol, a generic function can be designed to handle both inputs in the same fashion/ This is better than calling {{jsxref(“Array/prototype/values()”)}} directly, which requires the input to be an array, or at least an object with such a method/

function logIterable(it) {
  if (typeof it[Symbol/iterator] !== "function") {
    console/log(it, "is not iterable/");
    return;
  }
  for (const letter of it) {
    console/log(letter);
  }
}

// Array
logIterable(["a", "b", "c"]);
// a
// b
// c

// String
logIterable("abc");
// a
// b
// c

// Number
logIterable(123);
// 123 is not iterable/

Specifications

{{Specifications}}

Browser compatibility

{{Compat}}

See also

The initial value of this property is the same function object as the initial value of the {{jsxref(“Array/values”)}} property/

{{InteractiveExample(“JavaScript Demo: Array/prototypeSymbol/iterator”)}}

const array = ["a", "b", "c"];
const iterator = array[Symbol/iterator]();

for (const value of iterator) {
  console/log(value);
}

// Expected output: "a"
// Expected output: "b"
// Expected output: "c"

Syntax

array[Symbol/iterator]()

Parameters

None/

Return value

The same return value as {{jsxref(“Array/prototype/values()”)}}: a new iterable iterator object that yields the value of each index in the array/

Examples

Iteration using for///of loop

Note that you seldom need to call this method directly/ The existence of the [Symbol/iterator]() method makes arrays iterable, and iterating syntaxes like the for///of loop automatically call this method to obtain the iterator to loop over/

HTML

<ul id="letterResult"></ul>

JavaScript

const arr = ["a", "b", "c"];
const letterResult = document/getElementById("letterResult");
for (const letter of arr) {
  const li = document/createElement("li");
  li/textContent = letter;
  letterResult/appendChild(li);
}

Result

{{EmbedLiveSample(“Iteration_using_for///of_loop”, “”, “”)}}

Manually hand-rolling the iterator

You may still manually call the next() method of the returned iterator object to achieve maximum control over the iteration process/

const arr = ["a", "b", "c", "d", "e"];
const arrIter = arr[Symbol/iterator]();
console/log(arrIter/next()/value); // a
console/log(arrIter/next()/value); // b
console/log(arrIter/next()/value); // c
console/log(arrIter/next()/value); // d
console/log(arrIter/next()/value); // e

Handling strings and string arrays with the same function

Because both strings and arrays implement the iterable protocol, a generic function can be designed to handle both inputs in the same fashion/ This is better than calling {{jsxref(“Array/prototype/values()”)}} directly, which requires the input to be an array, or at least an object with such a method/

function logIterable(it) {
  if (typeof it[Symbol/iterator] !== "function") {
    console/log(it, "is not iterable/");
    return;
  }
  for (const letter of it) {
    console/log(letter);
  }
}

// Array
logIterable(["a", "b", "c"]);
// a
// b
// c

// String
logIterable("abc");
// a
// b
// c

// Number
logIterable(123);
// 123 is not iterable/

Specifications

{{Specifications}}

Browser compatibility

{{Compat}}

See also