A comparison of traversal syntax in JS

Source: Internet
Author: User

For loop

JavaScript provides a variety of traversal syntax. The most primitive way of writing is for looping.

Let arr = [1,2,3,4,5];  for (var index = 0; index < arr.length; index++) {  //1 2 3 4 5}

Disadvantage: This kind of writing is more troublesome


Arrays provide built-in forEach methods

Let arr = [1,2,3,4,5+ = {    //1 2 3 4 5});

Cons: The problem with this notation is that you can't jump out of a forEach loop, and break commands or return commands don't work.


The for...in is used to iterate through all the enumerable properties of an object, and functions like Object.keys ().

Let obj = {    ' cloud ', ' 157xxxx2065 ' for in     obj} {    //Name phone}

There may be friends who ask, what are non-enumerable objects? For example constructor, the length of an array is a non-enumerable property.

Let arr = [ten, 1,     0, "2" ' 3 "4 '}


    • The key name of the array is a number, but the for...in loop is the string as the key name "0", "1", "2" and so on.
    • for...inLoops are primarily designed for traversing objects, not for iterating over arrays

For...of is the new traversal method of ES6, which provides a unified traversal mechanism. All objects that implement the [Symbol.iterator] interface can be traversed. for...ofloops can be used with arrays, Set and MAP structures, some array-like objects (such as arguments objects, DOM NodeList objects), Generator objects, and string


    • With for...in the same concise syntax, but without for...in those shortcomings
    • Different for forEach methods, which can be break used with, continue and return with
    • Provides a unified operating interface for traversing all data structures

Here is an example of using the break statement to jump out for...of of a loop.

 for (var  N of Fibonacci) {  if (n >)    break;  Console.log (n);}

The above example outputs an item with a Fibonacci sequence that is less than or equal to 1000. If the current item is greater than 1000, the statement is used to jump out of the break for...of loop.

For...of getting an index
    • entries()Returns a Walker object that is used to traverse [键名, 键值] the composed array. For arrays, the key name is the index value, and for Set, the key name is the same as the key value. The Iterator interface of the MAP structure, by default, is the calling entries method.
    • keys()Returns a Walker object that is used to traverse all key names.
    • values()Returns a Walker object that is used to traverse all the key values.
// DemoLet arr = [' A ', ' B ', ' C '];  for (Let pair of arr.entries ()) {  console.log (pair);} // [0, ' a '] // [1, ' B '] // [2, ' C ']
An array-like object

An array-like object consists of several classes. The following are for...of examples of loops used for strings, DOM NodeList objects, and arguments objects.

//stringLet str = "Hello"; for(let S of str) {Console.log (s);//h e l l o}//DOM NodeList ObjectLet paras = Document.queryselectorall ("P"); for(let P of paras) {P.classlist.add ("Test");}//arguments ObjectfunctionPrintargs () { for(Let x of arguments) {console.log (x); }}printargs (' A ', ' B ');//' A '//' B '

Not all array-like objects have Iterator interfaces, and a simple workaround is to use Array.from methods to convert them to arrays.

Let Arraylike = {length:2, 0: ' A ', 1: ' B ' }; // Error  for (Let X of Arraylike) {  console.log (x);} // correct  for (Let X of Array.from (Arraylike)) {  console.log (x);  //' a '//' B '}
Normal Object

For ordinary objects, the for...of structure can not be used directly, will be error, you must deploy the Iterator interface to use.

Let Es6 = {  6,  "TC39",  "ECMA-262"};  for inch es6) {  console.log (e);} // Edition // Committee //  Standard  for (let E of Es6) {  console.log (e);} // typeerror:es6 is not iterable

The workaround is to use the Object.keys method to generate an array of the object's key names and then iterate through the array.

 for (var  Key of Object.keys (Someobject)) {  + ': ' + Someobject[key]);}

A comparison of traversal syntax in JS

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.