总结:
遍历基本属性
遍历原型链
遍历不可枚举属性
遍历Symbol
for in
是
是
否
否
Object.keys()
是
否
否
否
Object.getOwnPropertyNames()
是
否
是
否
Object.getOwnPropertySymbols()
否
否
是
是
Reflect.ownKeys()
是
否
是
是
三、其他遍历方法1. forfor循环是应该是最常见的循环方式了 , 它由三个表达式组成 , 分别是声明循环变量、判断循环条件、更新循环变量 。这三个表达式用分号分隔 。可以使用临时变量将数组的长度缓存起来 , 避免重复获取数组长度 , 当数组较大时优化效果会比较明显 。
const arr = [1,2,3,4,5]for(let i = 0, len = arr.length; i < len; i++ ){console.log(arr[i])}
在执行的时候 , 会先判断执行条件 , 再执行 。for循环可以用来遍历数组 , 字符串 , 类数组 , DOM节点等 。可以改变原数组 。2. whilewhile循环中的结束条件可以是各种类型 , 但是最终都会转为布尔值 , 转换规则如下 。
- Boolean:true为真 , false为假;
- String:空字符串为假 , 所有非空字符串为真;
- Number:0为假 , 非0数字为真;
- null/Undefined/NaN:全为假;
- Object:全为真 。
let num = 1;while (num < 10){console.log(num);num ++;}
while和for一样 , 都是先判断 , 再执行 。只要指定条件为 true , 循环就可以一直执行代码 。3. do / while该方法会先执行再判断 , 即使初始条件不成立 , do/while循环也至少会执行一次 。
let num = 10;do {console.log(num);num--;}while(num >= 0);console.log(num); //-1
不建议使用do / while来遍历数组 。
4. for await offor await...of方法被称为异步迭代器 , 该方法是主要用来遍历异步对象 。它是ES2018中引入的方法 。
for await...of 语句会在异步或者同步可迭代对象上创建一个迭代循环 , 包括 String , Array , 类数组 , Map , Set和自定义的异步或者同步可迭代对象 。这个语句只能在 async function内使用:
function Gen (time) {return new Promise((resolve,reject) => {setTimeout(function () {resolve(time)},time)})}async function test () {let arr = [Gen(2000),Gen(100),Gen(3000)]for await (let item of arr) {console.log(Date.now(),item)}}test()
输出结果:
文章插图
推荐阅读
- 小三|死循环!“山东第一胖”王浩楠翻车后又复胖,体重反弹疑已被抛弃
- 招商信用卡循环利息是什么意思?信用卡账单里“循环利息”是什么意思?
- 三分钟轻松搞懂 HashMap 死循环问题!
- 为什么 JavaScript 在国外逐渐用于前端+后端开发,而国内还是只用它做前端?
- object JavaScript选择 map而非对象存储键值对的 5 个理由附示例
- JavaScript 类型转换和强制转换
- 循环取货(Milk Run) 循环取货
- 不可回收垃圾有哪些、垃圾桶标志以及循环标志和不可回收标志是什么样子
- 小行星撞击曾触发地壳物质循环 地壳物质循环
- 游泳池水处理设备怎么选择? 游泳池循环水处理设备