关于for循环,我经常会混淆,在此作一下梳理。数组
最原始的遍历,得到数组里的值。函数
var arr1 = [1, 2, 3]; for(var i = 0 ; i< arr1.length; i++){ console.log(arr1[i]); }
for……in,遍历对象的属性名称,键名key。在数组中,每一个元素的下标索引被视为数组的属性名称。因此用for……in遍历数组时,实际上得到的值是索引值。code
var arr = ["Hello", "world"]; arr.name = "index"; for (var k in arr){ console.log(k); // 0,1,name console.log([arr[k]); // 属性对应的值 "Hello", "world" } console.log(arr.length); // 2
从结果,咱们能够看到,当你为arr添加一个新的属性名:name时,遍历时,会把这个属性包括在内,可是,arr.length仍是原来的。对象
for……of,遍历对象的属性值,键值value。它只循环集合自己的元素索引
var arr = ["Hello", "world"]; arr.name = "index"; for (var k in arr){ console.log(k); // Hello, world } console.log(arr.length); // 2
同时,for……of支持遍历其余集合,如字符串、Set和Map对象。再有,它不一样于forEach,可使用 break 语句跳出循环,也可使用 continue 和 return 语句。字符串
forEach实际上是for循环的简化版,适合于循环次数未知状况下使用。foreach 方法没办法使用 break 语句跳出循环,也没法使用return从函数体内返回。console