zoukankan      html  css  js  c++  java
  • for each in for in for of

    for each...in

    使用一个变量迭代一个对象的所有属性值,对于每一个属性值,有一个指定的语句块被执行.

    for each...in 是 ECMA-357 (E4X) 标准的一部分, 大部分非Mozilla浏览器都没有实现该标准, E4X并不是 ECMAScript 标准的一部分.

    作为ECMA-357(E4X)标准的一部分,for each...in语句已被废弃,E4X中的大部分特性已被删除,但考虑到向后兼容,for each...in只会被禁用而不会被删除,可以使用ES6中新的for...of语句来代替.

    语法:

    1
    2
    3
    for each (variable in object) {
      statement
    }

      

    参数:

    variable
    用来遍历属性值的变量,前面的var关键字是可选的.该变量是函数的局部变量而不是语句块的局部变量.
    object
    该对象的属性值会被遍历.
    statement
    遍历属性值时执行的语句. 如果想要执行多条语句, 请用({ ... }) 将多条语句括住.

    一些对象的内置属性是无法被遍历到的,包括所有的内置方法,例如String对象的indexOf方法.不过,大部分的用户自定义属性都是可遍历的.

    警告:永远不要使用for each...in语句遍历数组,仅用来遍历常规对象。

    for...in 

    以任意顺序遍历一个对象的可枚举属性。对于每个不同的属性,语句都会被执行。

    语法:

    1
    for (variable in object) {...}

      

    参数:

    variable
    在每次迭代时,将不同的属性名分配给变量
    object
    被迭代其枚举属性的对象。

    for..in 不应该被用来迭代一个下标顺序很重要的 Array .

    数组索引仅是可枚举的整数名,其他方面和别的普通对象属性没有什么区别。for...in 并不能够保证返回的是按一定顺序的索引,但是它会返回所有可枚举属性,包括非整数名称的和继承的。

    因为迭代的顺序是依赖于执行环境的,所以数组遍历不一定按次序访问元素。 因此当迭代那些访问次序重要的 arrays 时用整数索引去进行 for 循环 (或者使用 Array.prototype.forEach() 或 for...of 循环) 。

    仅迭代自身的属性

    如果你只要考虑对象本身的属性,而不是它的原型,那么使用 getOwnPropertyNames() 或执行  hasOwnProperty() 来确定某属性是否是对象本身的属性 (也能使用propertyIsEnumerable)。另外,如果你知道外部不存在任何的干扰代码,你可以扩展内置原型与检查方法。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var obj = {a:1, b:2, c:3};
         
    for (var prop in obj) {
      console.log("obj." + prop + " = " + obj[prop]);
    }
     
    // Output:
    // "obj.a = 1"
    // "obj.b = 2"
    // "obj.c = 3"

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    var triangle = {a:1, b:2, c:3};
     
    function ColoredTriangle() {
      this.color = "red";
    }
     
    ColoredTriangle.prototype = triangle;
     
    var obj = new ColoredTriangle();
     
    for (var prop in obj) {
      if( obj.hasOwnProperty( prop ) ) {
        console.log("o." + prop + " = " + obj[prop]);
      }
    }
     
    // Output:
    // "o.color = red"

      

    for...of

     ECMAScript 6新方法,使用时参考https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/for...of

    • for...of - 一个相似的语法,用来遍历可迭代对象,有时候效果等同于for each...in语句.
    • 对于for...of的循环,可以由breakthrow 或return终止。在这些情况下,迭代器关闭。
    • 不要重用生成器

      生成器不应该重用,即使for...of循环的提前终止,例如通过break关键字。在退出循环后,生成器关闭,并尝试再次迭代,不会产生任何进一步的结果。

  • 相关阅读:
    第五次作业
    第四次作业
    软件工程(第二次作业)
    读软件工程这本书的感悟(第一次作业)
    第五次作业
    软件工程第四次作业
    软件工程第二次作业
    软件工程第二次作业
    什么样的书叫做好书,大学的教育到底培养的是什么?
    软件工程学习的问题:
  • 原文地址:https://www.cnblogs.com/wwwlinguangcom/p/9932577.html
Copyright © 2011-2022 走看看