for-in和for-of区别
for…in是遍历数组、对象的key,数组相当于索引值
使用for…in遍历时,原型链上的所有属性都将被访问
let arr = [1, 2, 3];
for (let i in arr) {
console.log(i)
}
let obj = {
name: 'haha',
age: 18,
};
for (let i in obj) {
console.log(i)
}
输出结果为:0 1 2 name age
若想遍历值,可将代码改为
let arr = [1, 2, 3];
for (let i in arr) {
console.log(arr[i])
}
let obj = {
name: 'haha',
age: 18,
};
for (let i in obj) {
console.log(obj[i])
}
输出结果为:1 2 3 haha 18
for…of 遍历数组的值
let arr = [1, 2, 3];
for (let i of arr) {
console.log(i)
}
输出结果为:1 2 3
注意这里for…of不能遍历一个普通的对象
拓展:forEach
遍历数组,但不能使用break、continue和return语句
//对象数组
var arr = [
{guangzhou: '广州', shanghai: '上海', beijing: '北京'},
{Monday: '星期一', Tuesday: '星期二', Wednesday: '星期三'}
]
arr.forEach(function(value,index){
//第一个参数是值,第二个参数是下标(索引)
console.log(value)
console.log(index)
})
总结:
for(最原始的写法)、 forEach(ES5,但是它不支持使用break、continue和return语句)、for…of(ES6,循环数组的元素值)这三个是循环数组(对象数组)的;
for…in循环数组索引、对象的属性,但使用 for…in 原型链上的所有属性都将被访问,用 hasOwnProperty() 方法解决。