• for in 循环 和for循环 for of循环


      for in 循环得到的是数组的key值

      for  in 循环用以遍历对象的属性

      var scores=[10,11,12];
      var total=0;
      for(var score in scores){

        console.log(score);// 0 1 2 

        console.log(typeof score);//string  key值的类型为字符串
        total+=score;//total本身是number类型,但是由于number类型和string类型向加,会得到字符串类型,属于字符串拼接
      }
      console.log(total);//0012  所以最终的结果是0012

      for  in  循环的缺点

      for(var index in arr){
        console.log(arr[index]) //数组的value值
      }

    • 代码中赋值为index的值是字符串"0", "1","2"等,而不是真是的数字。由于你不想要碰到字符串计算("2" + 1 == "21")的状况,这对于编程而言是极其不方便的。
    • 循环体不仅仅会遍历数组元素,还会遍历任意其他的自定义添加的属性。例如,如果数组包含了一个不能枚举的属性 myArray.name,那么这次循环就会在 index == "name" 的时候额外执行一遍。甚至数组原型链上的属性也都会被遍历到。
    • 最让人感到惊奇的是,在某些状况下,这段代码会以随机顺序循环数组元素。
    • 简而言之,for-in 循环在设计之初就是用于普通的以字符串为 key 值的对象的语法,而不适用与数组。

     for循环得到的是数组的value值

        var a=0;
        var scores=[10,11,12];
        for(var i=0;i<scores.length;i++){
          console.log(scores[i])// 10 11 12
          console.log(typeof scores[i])//number
          a+=scores[i];//所以此时属于数字相加
          }
        console.log(a);//33 最后得到的结果是33

      所以引起此变化的根本原因在于数组的key值的类型为string,而value的值为number

      for的理解

      

              /*
                    因为当循环结构执行完时 i是等于9 的
                    但是由于for循环条件的第三个是i++,是后加加,
                    那么当结束循环的时候 i 还会自加1;所以执行完后i=10,此时跳出循环所以输出的i为10
                 */for(var i=0;i<10;i++){
                    console.log(i) //0 1 2 3 4 5 6 7 8 9
                }
                console.log(i) //10
            //用来计数的循环变量泄露为全局变量。

     ---------------------------------------------------------------------于2017/12/28补充-----------------------------------------------------------------------------------

    在ES5中 forEach  ,缺点:无法使用 break 语句跳出循环,或者使用 return 从函数体内返回。

      var arr=['Jane',16,'female']
      for(var value of arr){
        console.log(value) //依次输出Jane  16  female
           }

    在ES6中新添加了for of循环

    for-of 循环用以遍历数据 -- 就像数组中的值一样

    var arr=['Jane',16,'female']
    for( var  value  of  arr ){
        console.log(value) //依次输出Jane  16  female
    }

      ---------------------------------------------------------------------于2018/03/01补充-----------------------------------------------------------------------------------

    for 循环还有一个特别之处,就是设置循环变量的的那部分是一个父级作用域,而循环体内部是一个单独的子集作用域

    	for(let i=0;i<3;i++){
    		let i = 'abc'
    	   console.log(i) 
    	}
    	//abc 
    	//abc 
    	//abc
    

      

  • 相关阅读:
    Jdk1.7 与 jdk1.8的区别,最新的特征有哪些(美团,360,京东面试题目)
    Android利用zxing生成二维码
    Android 事件传递机制
    Android 如何让EditText不自动获取焦点&隐藏软键盘
    Android--控件的滑动事件
    解决Android3.0之后不能在主线程中进行HTTP请求
    JavaIO 思维导图
    MySQL的注释方法
    MySQL——约束(constraint)详解
    自动回复之实现随机回复与常用Mapper XML标签
  • 原文地址:https://www.cnblogs.com/xumqfaith/p/7743043.html
Copyright © 2020-2023  润新知