• for each in&for in&for of


    For ......... each in

    for each是jdk5.0新增加的一个循环结构,可以用来以此处理数组中的每个元素(其他类型的元素集合也可以)而不用为指定下标而分心。它是一个类似但已弃用的语句,它迭代对象属性的值,而不是属性名称本身
    格式如下:
    for(variable:collection)

    {

    Statement

    }     (“:”等于“in”)

    即for each (variable in object) {

      statement

    }

    参数:

    Variable

    变量以迭代属性值,可选使用var关键字声明。该变量是函数的局部变量而不是语句块的局部变量

    Object

    迭代属性的对象。该对象的属性值会被遍历

    Statement

    遍历属性值时执行的语句。如果要在循环中执行多个语句,请使用({ ... })对这些语句进行分组。 

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

     var sum 

     = 0;var obj = {prop1: 5, prop2: 13, prop3: 8};

    for each (var item in obj) {

      sum += item;}

    console.log(sum); // logs "26", which is 5+13+8

    let arr = ['a', 'b', 'c', 'd']

    arr.forEach(function (val, idx, arr) {

        console.log(val + ', index = ' + idx) // val是当前元素,index当前元素索引,arr数组

        console.log(arr)

    })

    输出结果:

     

    a, index = 0

    (4) ["a", "b", "c", "d"]

    b, index = 1

    (4) ["a", "b", "c", "d"]

    c, index = 2

    (4) ["a", "b", "c", "d"]

    d, index = 3

    (4) ["a", "b", "c", "d"]

    写法简单了很多,但是也存在一个局限 就是你不能中断循环(使用break语句或使用return语句)。

    ---------------------

    作者:一个慢

    来源:CSDN

    原文:https://blog.csdn.net/one_girl/article/details/80192899

    For ......... in

    For in语句是JDK5版本的新特性,在此之前,遍历数组或集合的方法有两种:通过下标遍历和通过迭代器遍历。 

    JDK5以后引入了forin语句,目的是为了简化迭代器遍历,其本质仍然是迭代器遍历。forin语句的写法很简单:

    格式: 

    for (variable in object) { ...

    }

    Variable

    每次迭代都会为变量分配不同的属性名称。

    Object

    迭代可枚举属性的对象。 

    for(数据类型 对象名:数组或集合名){

    ................

    }

    这里的数据类型是数组或集合中的数据类型,接着声明一个该数据类型的对象,用于代替数组或集合中的每一个元素(因此for in语句又称为for each语句),最后便是对该对象也就是数组或集合中元素的操作了。

    for...in 循环只遍历可枚举属性。像 Array Object使用内置构造函数所创建的对象都会继承自Object.prototype和String.prototype的不可枚举属性,例如 String 的 indexOf()  方法或 ObjecttoString()方法。循环将遍历对象本身的所有可枚举属性,以及对象从其构造函数原型中继承的属性(更接近原型链中对象的属性覆盖原型属性)。 

    for...in以任意顺序循环迭代的对象的属性 

    如果在一次迭代中修改属性,然后在稍后访问该属性,则其在循环中的值是其稍后的值。在访问之前删除的属性将不会在以后访问。添加到正在进行迭代的对象的属性可以在迭代中被访问或省略。通常,除了当前正在访问的属性之外,最好不要在迭代期间添加,修改或删除对象的属性。无法保证是否会访问添加的属性,是否在修改之前或之后访问已修改的属性(当前的属性除外),或者删除之前是否将访问已删除的属性。

     注意: for...in不应该用于迭代数组下标顺序很重要的位置。

    数组索引只是具有整数名称的可枚举属性,并且与一般对象属性相同。无法保证for...in以任何特定顺序返回索引。该for...in循环语句将返回所有枚举的属性,包括那些非整数的名字和那些继承。

    因为迭代的顺序是依赖于实现的,所以迭代数组可能不会以一致的顺序访问元素。因此,在迭代访问顺序很重要的数组时,最好使用for带有数字索引(或循环)Array.prototype.forEach()for...of循环。

     它仅对自己的属性进行迭代

    如果您只想考虑附加到对象本身的属性,而不是其原型,请使用getOwnPropertyNames()或执行hasOwnProperty()检查(propertyIsEnumerable也可以使用)。或者,如果您知道不会有任何外部代码干扰,您可以使用check方法扩展内置原型。 

    例子:

    以下函数将对象作为其参数。然后,它遍历所有对象的可枚举非Symbol属性,并返回属性名称及其值的字符串。 

    var obj =  { a : 1 , b : 2 , c : 3 } ;

        for  (const prop in obj ) {

     

      console 。log (`obj。$ { prop } = $ { obj [ prop ] } `); }

    //输出://“obj.a = 1” //“obj.b = 2” //“obj.c = 3”

    let obj = {a: '1', b: '2', c: '3', d: '4'}

    for (let o in obj) {

     console.log(o) //遍历的实际上是对象的属性名称 a,b,c,d 

    console.log(obj[o]) //这个才是属性对应的值1,2,3,4 } 

     

     

    For ...............of(一个迭代属性的类似语句) 

    格式:

    for (variable of iterable) {

      statement}

    参数:

    variable

    在每次迭代时,将不同属性的值分配给变量

    object

    迭代其可迭代属性的对象。

    例子:
    let iterable = [10, 20, 30];

    for (let value of iterable) {

      value += 1;

      console.log(value);}// 11// 21// 31

    For in 与for of 的区别:

    两个for...infor...of语句都迭代了某些东西。它们之间的主要区别在于它们的迭代。

    for...in语句以任意顺序迭代对象的可枚举属性

    for...of语句迭代可迭代对象定义为迭代的数据。

    Object.prototype.objCustom = function() {};

    Array.prototype.arrCustom = function() {};

    let iterable = [3, 5, 7];

    iterable.foo = 'hello';

    for (let i in iterable) {

      console.log(i); // logs 0, 1, 2, "foo", "arrCustom", "objCustom"}

    for (let i in iterable) {

      if (iterable.hasOwnProperty(i)) {

        console.log(i); // logs 0, 1, 2, "foo"

      }}

    for (let i of iterable) {

      console.log(i); // logs 3, 5, 7}

     

     

  • 相关阅读:
    spring三大框架整合
    spring基础内容
    安装Apache报80端口被占用 pid 4
    Bugzilla说明
    管理员权限的用户
    mac怎么连接windows远程桌面
    java化测试神器-流量回放平台
    PyAutoGUI——图形用户界面自动化
    (Python OpenGL)【5】平移 PyOpenGL
    (Python OpenGL)【4】Uniform变量 PyOpenGL
  • 原文地址:https://www.cnblogs.com/yyqxlcx/p/9926180.html
Copyright © 2020-2023  润新知