JS的for
循环主要包含如下几种:for(let i = 0; i < len; i++)
, for-in
, for-of
,for-each
。
至于第一种for
循环,地球人都会,按下不表。难点在于for-in
,for-of
, for-each
直接有什么区别,看起来都差不多的样子。
一句话概述for-in
与for-of
:for-in
遍历得到的是key
值,适用于对象的遍历,for-of
得到的是value
值,适合数组的遍历。只要有 iterator 接口的数据结构,都可以使用 for-of
循环,包括:Array, Map, Set, String, arguments对象, Nodelist对象
for-in
对象属性
获得的是属性值
var person ={
name:"admin",
age:"21",
address:"shanghai"
};
for(var i in person){
console.log(i)
}
// name, age, address
数组
获得的是对象的索引值
遍历的时候不要用这个!
var array =['admin','manager','db'];
for(var i in array){
console.log(i)
}
// 0, 1, 2
当给数组的原型添加属性时,for in 会遍历到原型链上的属性
var array = ['admin','manager','db'];
Array.prototype.name = 'zhangsan';
for(var i in array){
console.log(array[i])
}
// admin manager db zhangsan
for(var i in array){
console.log(i)
}
这时候只要判断是不是本身所有的属性就行了
var array = ['admin','manager','db'];
Array.prototype.name = 'zhangsan';
for(var i in array){
if(!array.hasOwnProperty(i)){
continue
}
console.log(array[i])
}
// admin manager db
for-Each
数组
传入匿名的回调函数,匿名函数的参数为:当前项item,索引index(可省),当前数组array(可省)
array.forEach(callback(currentValue, index, array){
//do something
})
array.forEach(function(element) {
console.log(element)
})
for of
数组
for-of这个方法避开了for-in循环的所有缺陷
与forEach()不同的是,它可以正确响应break、continue和return语句
for( let i of arr){
console.log(i);
}
map
map遍历与foreach类似,支持使用return语句,支持return返回值
var temp=arr.map(function(val,index){
console.log(val);
return val*val
})
console.log(temp);
参考链接link
网友评论