特点:
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)
// }
暂时总结这几种情况