都可以用于遍历数组,只有 for in 能遍历对象
forEach (都能访问)
- 三个参数,第一个value, 第二个 index, 第三个数组体(即整个数组本身)
- 适用于 数组,set,map,不适应于 字符串,Object
- 不能终止循环,break,continue不能使用
- 只做遍历用,不能给数组增项删项,但可以对项本身修改
- 效率和for循环相同 ,for (var i=0; i<arr.length;i++)
for in (访问键名)
- 遍历数组索引、对象的属性
- 循环将遍历对象本身的所有可枚举属性,以及对象从其构造函数原型中继承的属性(更接近原型链中对象的属性覆盖原型属性)。原型链上的所有属性
- 数组的键名是数字,但是for…in循环是以字符串作为键名“0”、“1”、“2”
- 所以for…in循环主要是为遍历对象而设计的,不适用于遍历数组,但也能用只是关于索引有些麻烦
- 输出顺序:先遍历整数属性(按照升序),然后其他属性按照创建时候的顺序遍历。Object.keys()和for in 具有相同的排列顺序
- hasOwnProperty()方法可以检测一个属性是存在于实例中,还是存在于原型中。这个方法只在给定属性存在于对象实例中时,才会返回true。
for of (访问键值)
- 不同于forEach方法,它可以与break、continue和return配合使用
- 有着同for…in一样的简洁语法,但是没有for…in那些缺点
- 遍历数组的值,对象不行
- 是目前遍历数组最好的方法,可以用在set,map,类数组,字符串上,但是不支持原生的Object遍历。