for...in...
- 获取对象的键名,获取不到键值
- 所有可枚举的属性
- 可以中途跳出循环
var arr = ['a', 'b', 'c', 'd'];
arr.foo = "a"
for (let a in arr) {
console.log(a); // 0 1 2 3 foo
}
for...of...
- 获取对象的键值
- 只能返回具有数字索引的属性,后面手动添加进去的属性不生效
- 可以中途跳出循环
var arr = ['a', 'b', 'c', 'd'];
arr.foo = "a"
for (let a of arr) {
console.log(a); // a b c
}
for...of...不能循环普通对象,但是可以改造一下
var obj = {
a:'1',
b:'2'
};
for (let key of Object.keys(obj) ) {
console.log(key+":"+obj[key]); // a b c
}
其他遍历语法
- for()
- forEach()
- 无法中途跳出循环
- for...in...
- 可以获取键名
- 如果键名为数字,这种方式遍历出来的键名为字符串
- 还会遍历手动添加的其他键。包括原型上的键
- for...of... :可以算作最优解决方案了