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

  

for in 循环 和for循环 for of循环的更多相关文章

  1. ios开发环境 分支语句 、 循环结构(for) 、 循环结构

    1 完成命令解析程序 1.1 问题 有命令解析程序,该程序提供三个功能选项供用户选择,用户选择某功能后,程序在界面上输出用户所选择的功能名称.程序的交互效果如图-1所示: 图-1 由上图可以看出,程序 ...

  2. for循环的表达规则,for循环的嵌套,跳转语句;穷举;迭代;异常处理

    for循环的基本格式 for(表达式1:表达式2:表达式3) { 循环体: } for循环的四要素 表达式1就是变量初始化:表达式2就是循环条件:表达式3是状态改变 static void Main( ...

  3. 房上的猫:for循环,跳转语句与循环结构,跳转语句进阶

    一.for循环 1.定义:  for循环语句的主要作用是反复执行一段代码,直到满足一定条件为止 2.组成部分:  (1)初始部分:设置循环的初始状态  (2)循环体:重复执行的代码  (3)迭代部分: ...

  4. JavaScript-//FOR/IN循环。当使用for/in循环遍历关联数组时,就可以清晰地体会到for/in的强大之处。

    <script> //FOR/IN循环.当使用for/in循环遍历关联数组时,就可以清晰地体会到for/in的强大之处. function getvalue(portfolio){ var ...

  5. Spring 循环引用(一)一个循环依赖引发的 BUG

    Spring 循环引用(一)一个循环依赖引发的 BUG Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) Spring 循环 ...

  6. 选择排序是外面循环的array[i]与内循环的array[j]比较。冒泡排序是内循环的相邻两个值做比较修改

    选择排序是外面循环的array[i]与内循环的array[j]比较.冒泡排序是内循环的相邻两个值做比较修改

  7. Windows 消息循环(2) - WPF中的消息循环

    接上文: Windows 消息循环(1) - 概览 win32/MFC/WinForm/WPF 都依靠消息循环驱动,让程序跑起来. 本文介绍 WPF 中是如何使用消息循环来驱动程序的. 4 消息循环在 ...

  8. for循环和增强版的for循环

    增强的for循环. 缺点:   对于数组.不能方便的訪问下标值.   对于集合,与使用Interator相比.不能方便的删除集合中的内容(在内部也是调用Interator). 除了简单遍历并读取当中的 ...

  9. Java循环结构之while和do-while循环

    循环结构知识点 本章技能目标 1理解循环的含义 2会使用while循环 3会使用do-while循环 4会使用调试解决简单的程序错误 一.   循环的含义 循环就是重复的做……(Java程序中的循环结 ...

  10. Effective JavaScript Item 49 对于数组遍历,优先使用for循环,而不是for..in循环

    本系列作为Effective JavaScript的读书笔记. 对于以下这段代码,能看出最后的平均数是多少吗? var scores = [98, 74, 85, 77, 93, 100, 89]; ...

随机推荐

  1. poj3273(二分)

    题目链接:https://vjudge.net/problem/POJ-3273 题意:给定n个数,将这n个数划分成m块,问所有块最大值的最小是多少. 思路:注意到所求值最大为109,所以可以用二分来 ...

  2. python中tolist()命令

  3. git创建新的分支

    1.本地创建一个新的分支 git branch develop 2.切换到新创建的分支 git checkout develop 3.将新的分支发布到gitlab上 git push origin d ...

  4. 哪些人才适合转行学习UI设计?

    最近有很多学员问,怎么才知道自己适不适合学习UI设计,在从事IT教育行业多年以来,也确实碰到好多人咨询这个问题,今天就和大家说下,哪些人才适合转行学习UI设计?(转行必看) 1 平面设计师.网页设计师 ...

  5. HBase总结(十一)hbase Java API 介绍及使用示例

    几个相关类与HBase数据模型之间的对应关系 java类 HBase数据模型 HBaseAdmin 数据库(DataBase) HBaseConfiguration HTable 表(Table) H ...

  6. const和static readonly 区别

    const的值是在编译期间确定的,因此只能在声明时通过常量表达式指定其值. 而static readonly是在运行时计算出其值的,所以还可以通过静态构造函数来赋值. static readonly ...

  7. AJAX技术主要包含的四个组件

    1.XMLHttpRequest:使用AJAX技术都是从XMLHttpRequest开始的. 2.JavaScript:实现XMLHttpRequest对象相关功能. 3.CSS 4.DOM

  8. SAS语言结构

    SAS程序用于访问.管理.分析和展现数据.其基础组成部分是 DATA步和PROC步,PROC步又称为SAS过程.一个SAS程序可包含以 任意顺序组合的多个DATA步和多个PROC步. DATA步通常用 ...

  9. 【慕课网实战】Spark Streaming实时流处理项目实战笔记二十一之铭文升级版

    铭文一级: DataV功能说明1)点击量分省排名/运营商访问占比 Spark SQL项目实战课程: 通过IP就能解析到省份.城市.运营商 2)浏览器访问占比/操作系统占比 Hadoop项目:userA ...

  10. AdminLTE用django部署

    前言 最近从网上看到AdminLTE这个web前端的主题挺好的,我平时用python就是写一些后台,准备以后就用这个框架了,这里就是把这个用django初始化一下这个项目. 基础环境介绍 Python ...