目录
一、JS 遍历数组
1、for 循环遍历数组
2、使用for ……in 遍历数组
3、for……of 遍历数组
4、forEach 遍历数组
5、map遍历数组
二、JS 遍历对象
1、for……in 循环遍历对象
2、Object.keys 遍历对象
3、Object.getOwnPropertyNames(obj) 遍历对象
一、JS 遍历数组
1、for 循环遍历数组
// 1、for循环let arr = ['d', 'a', 'w', 'n'];for (let i = 0; i < arr.length; i++){console.log(arr[i]);}
这种直接使用for循环的方法是最普遍的遍历数组和对象的方法;
2、使用for ……in 遍历数组
//2、for……in 循环let arr = ['d', 'a', 'w', 'n'];for (let key in arr) {console.log(arr[key]);}
3、for……of 遍历数组
//3、for……of 遍历数组let arr = ['d', 'a', 'w', 'n'];for (let value of arr) {console.log(value);}
es6新出的方法,for…of ,值得注意的是,for…of 和 for…in不一样,for…in是直接获取数组的索引,而for…of是直接获取的数组的值
ES6里引入了一种遍历器(Iterator)机制,为不同的数据结构提供统一的访问机制。只要部署了Iterator的数据结构都可以使用 for ··· of ··· 完成遍历操作
它既比传统的for循环简洁,同时弥补了forEach和for-in循环的短板。
循环遍历键值对的value,与for in遍历key相反
4、forEach 遍历数组
//4、forEach遍历数组let arr = ['d', 'a', 'w', 'n'];arr.forEach(function (k){console.log(k);})
forEach这种方法也有一个小缺陷:你不能使用break语句中断循环,也不能使用return语句返回到外层函数。
5、map遍历数组
// 5、map 遍历数组let arr = ['d', 'a', 'w', 'n'];let res = arr.map(function (item) {return item;})console.log(res);
总结:
for…in 遍历(当前对象及其原型上的)每一个key,而 for…of遍历(当前对象上的)每一个value;for in 以任意顺序遍历对象的可枚举属性,(最好不要用来遍历数组) 因此当迭代那些访问次序重要的 arrays 时用整数索引去进行 for 循环 (或者使用 Array.prototype.forEach() 或 for…of 循环) 。(ES6)for…of 允许你遍历 Arrays(数组), Strings(字符串), Maps(映射), Sets(集合)等可迭代的数据结构等。不能遍历普通对象forEach 遍历数组,而且在遍历的过程中不能被终止,必须每一个值遍历一遍后才能停下来
二、JS 遍历对象
1、for……in 循环遍历对象
//1、for……in遍历对象var obj = {name: 'dawn',age: 21,address:'深圳'}for (let key in obj) {console.log(key+':'+obj[key]);}
2、Object.keys 遍历对象
//2、for……of遍历对象var obj = {name: 'dawn',age: 21,address: '深圳'}for (let key of Object.keys(obj)) {console.log(key+':'+obj[key]);}
【注意】:for…of不能单独来遍历对象,要结合Object.keys一起使用才行
Object.keys()
方法会返回一个由一个指定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用for...in
循环遍历该对象时返回的顺序一致。
3、Object.getOwnPropertyNames(obj) 遍历对象
//3、Object.getOwnPropertyNames(obj) 遍历对象var obj = {name: 'dawn',age: 21,address: '深圳'}Object.getOwnPropertyNames(obj).forEach(function (key){console.log(key+':'+obj[key]);})
返回一个数组,包含对象自身的所有属性(包含不可枚举属性) 遍历可以获取key和value