forof,forin,keys,ownkeys,values,entries

118 阅读1分钟

特点:

1.一般循环,只循环变量自身属性中的可迭代属性,不包括原型上属性

2.forin 循环自身和原型链上的全部属性

3.reflect.ownkeys 循环变量自身全部属性(可迭代和不可迭代)不包括原型上的


// 数组
let arr = [2,3]
Array.prototype.proName = 'hh'
Object.defineProperty(Array.prototype,'proFn',{
    value:'protofn',
    enumerable:false
})

//对象
let obj = {
    name:'p',
    age:'o'
}
Object.prototype.proName = 'hh'
Object.defineProperty(Object.prototype,'proFn',{
    value: 'hhhh',
    enumerable:false
})
Object.defineProperty(obj,'proFn',{
    value: 'hhhh',
    enumerable:false
})

// 循环自身可迭代属性 不包括不可迭代属性,也不包括原型上的
// for(let i =0; i < arr.length;i++) {
//     console.log(arr[i])
// }

// keys 
// console.log(Object.keys(arr))
// console.log(Object.keys(obj))
// console.log(Object.entries(obj))
// console.log(Object.values(obj))

// for of 
// for(item of arr) {
//     console.log(item)
// }


// 特殊的 ***
// ownkeys得到自身所有属性,包括不可迭代属性,不包括原型上的
// console.log(Reflect.ownKeys(arr))
// console.log(Reflect.ownKeys(obj))

// for in 循环自身和原型上全部可迭代属性
// for(k in arr) {
//     console.log(k)
// }
// for(k in obj) {
//     console.log(k)
// }

暂时总结这几种情况