, 函数本身不会直接改变调用它的对象, 但是可以在callback里面对原数组进行修改 2、 改变长度: 虽然callback可以修改原数组, 但遍历的范围在第一次调用时就会确定, 即在callback...: 对于数组中未初始化的值, forEach会直接跳过, 但是不会改变遍历元素的索引值[1, , , 4].forEach((v, i, array) => { console.log(`index...否是是否Object.keys否是否否Object.getOwnPropertyNames否是否是 4、 遍历过程中可以使用return、break、throw随时退出中断, 可以使用continue跳过某次循环...const v of iterable) { console.log(v);}// 0// 1 4、 遍历过程中可以使用return、break、throw随时退出中断, 可以使用continue跳过某次循环..., 下面一张表格对他们进行不同维度的对比五、循环对比功能对比类型目标类型是否可中断返回值forEach函数数组否undefinedfor...in表达式非Symbol可枚举属性是无for...of表达式对可迭代对象是无