1、for循环
for(var i=0;i<arrs.length;i++){ console.log(arrs[i]); }
2、增强for…in循环(大部分用于对象)
特征:
- 遍历对象键值(key),或者数组下标,不推荐循环一个数组
var obj = {a: 1, b: 2, c: 3}; for (var i in obj) { console.log('键名:', i); console.log('键值:', obj[i]); } // 键名: a // 键值: 1 // 键名: b // 键值: 2
注意:fo…in循环一般用于对象的遍历,但是这里有一个坑需要注意:
任何对象都继承了某些对象,例如:Object对象,继承的类的属性是默认不可遍历的,for...
in循环遍历的时候会跳过,但是这个属性是可以更改为可以遍历的,但是就会造成遍历到不属于自身的属性。
例:obj 继承了toString
属性,但是for...in
循环不会遍历到这个属性:
var obj = {};// toString 属性是存在的obj.toString // toString() { [native code] } for (var p in obj) { console.log(p); } // 没有任何输出
如果继承的属性是可遍历的,那么就会被for...in
循环遍历到。
但如果只想遍历自身的属性,使用for...in
的时候,应该结合使用hasOwnProperty
方法,在循环内部判断一下,某个属性是否为对象自身的属性。否则就可以产生遍历失真的情况。
var person = { name: 'hello' }; for (var key in person) { if (person.hasOwnProperty(key)) { console.log(key); } } // hello
扩展:for循环遍历json对象
无规律json数组:
var json1= [ {"name": "hello", "age": 18}, {"name": "world", "age": 26} ]; for (var i=0,l=json1.length;i<l;i++) { for (var key in json[i]) { console.log(key+':'+json[i][key]); } }
有规律json数组:
var json2= [
{"name": "hello", "age": 18},
{"name": "world", "age": 26}
];
for (var i in json2) {
//遍历数组时,i为索引,0,1
console.log(json2[i].name + ":" + json2[i].age);
}
3、for of(不能遍历普通的对象)
特性:
- (可遍历map,object,array,set string等)用来遍历数据,比如组中的值
- 避免了for in的所有缺点,可以使用break,continue和return,不仅支持数组的遍历,还可以遍历类似数组的对象。
- 是ES6新引入的特性。修复了ES5的for in的不足
- for of不能循环普通的对象,需要通过和Object.keys()搭配使用。
4、while 循环
While语句包括一个循环条件和一段代码块,只要条件为真,就不断循环执行代码块。
var i = 0; while (i < 100) { console.log('i 当前为:' + i); i = i + 1; }
5、do…while循环
do…while循环与while循环类似,唯一的区别就是先运行一次循环体,然后判断循环条件。
var i = 0; do { console.log(i); i++; } while(i < 100);
6、map(数组方法)
这里的map是“映射”的意思,map方法将数组的所有成员依次传入参数函数,然后把每一次的执行结果组成一个新数组返回。
特征:
- map不改变原数组,而是会返回新数组
- 可以使用break中断循环,可以使用return返回到外层函数
- 如果map函数中没有返回值,将会默认返回
undefined
。
array.map(function(currentValue,index,arr), thisValue)
var numbers1 = [1, 2, 3];
var numbers2 = numbers1.map(function (currentValue, index, arr) {
return currentValue+ 1;
});
var numbers3 = numbers1.map(function (currentValue, index, arr) {
});
console.log(numbers1);// [2, 3, 4]---不会改变原数组
console.log(numbers2);// [1, 2, 3]---返回新数组
console.log(numbers3);// [undefined, undefined, undefined]
7、forEach(数组方法)
特性:
- 便利的时候更加简洁,效率和for循环相同,不用关心集合下标的问题,减少了出错的概率。
- 没有返回值
- 不能使用break中断循环,不能使用return返回到外层函数
注意:
- forEach() 对于空数组是不会执行回调函数的。
- for可以用continue跳过循环中的一个迭代,forEach用continue会报错。
- forEach() 需要用 return 跳过循环中的一个迭代,跳过之后会执行下一个迭代。
array.forEach(function(currentValue,index,arr), thisValue)
8、filter(数组方法)
array.filter(function(currentValue,index,arr), thisValue)
9、reduce(数组方法)
array.reduce(function(total,currentValue,index,arr), thisValue)
相关文章:
js forEach、map、filter、reduce
https://www.49855.net/js-foreach、map、filter、reduce