美文网首页
for of, for in, forEach比较

for of, for in, forEach比较

作者: 页面仔小杨 | 来源:发表于2019-11-04 14:56 被阅读0次

    for of 、for in、forEach比较


    forEach

    forEach无法中途跳出forEach循环,break、continue和return都不奏效。

    for in

    for...in 循环只遍历可枚举属性。

    像 Array和 Object使用内置构造函数所创建的对象都会继承自Object.prototype和String.prototype的不可枚举属性,例如 String 的 indexOf() 方法或 Object的toString()方法。

    循环将遍历对象本身的所有可枚举属性,以及对象从其构造函数原型中继承的属性(更接近原型链中对象的属性覆盖原型属性)。

    for...in不应该用于迭代一个 Array,其中索引顺序很重要。

    for in 循环的输出顺序问题

    先遍历出整数属性(integer properties,按照升序),然后其他属性按照创建时候的顺序遍历出来。

    var obj = {  a:1,'2':1,'1':1,  d:1,  c:1,'3':1}

    obj.b=66;

    for(var key in obj) { console.log(key ); }

    //"1","2","3","a","d","c","b"

    Object.keys(obj);

     //["1","2","3","a","d","c","b"]

    Object.keys()和for in 具有相同的排列顺序

    for of

    有着同for...in一样的简洁语法,但是没有for...in那些缺点。

    不同于forEach方法,它可以与break、continue和return配合使用。

    提供了遍历所有数据结构的统一操作接口。

    1.for..of适用遍历数/数组对象/字符串/map/set等拥有迭代器对象的集合.但是不能遍历对象,因为没有迭代器对象.与forEach()不同的是,它可以正确响应break、continue和return语句

    2.for-of循环不支持普通对象,但如果你想迭代一个对象的属性,你可以用for-in循环(这也是它的本职工作)或内建的Object.keys()方法:

    for(varkeyofObject.keys(someObject)){console.log(key+": "+someObject[key]);}

    遍历map对象时适合用解构,例如;

    for(var[key,value]of phoneBookMap){console.log(key+"'s phone number is: "+value);}

    相关文章

      网友评论

          本文标题:for of, for in, forEach比较

          本文链接:https://www.haomeiwen.com/subject/omyrvctx.html