不好意思因为懒,,我懒得弄图,,就是代码+注释
var arr = [1,2,3];
//for in 可以遍历数组
for(let key in arr){
console.log(arr[key])
}
var _obj = {
"one":1,
"two":2
}
//for in 也可以遍历object
showObj(_obj);
//其实for in 是会遍历 目标所有可枚举的值
//通过Object.getOwnPropertyDescriptor 来查看 arr[0] 的属性描述表
showObj(Object.getOwnPropertyDescriptor(arr,"0"));
// value: 1 数值 是 1
// writable: true 可写 代表可以修改该值
// configurable: true 可配置 代表可以修改该值得属性描述表
// enumerable: true 可枚举 for in能否遍历到就看这个值是否为 true
//修改 arr[0]的属性描述表 使得它不可枚举
Object.defineProperty(arr,"0",{
enumerable:false
})
//for in 无法遍历到 arr[0]
for(let key in arr){
console.log(arr[key])
}
//发现确实 enumerable: true
showObj(Object.getOwnPropertyDescriptor(arr,"0"));
//数据描述表其他用处就不多说了。列举一个
//要设置一个常量 可以使得它的 writable configurable均为假即可。
//话说。。设置不可配置让他权限降级是可以的,也就是说设置了不可配置之后 本来只读要变成读写是不行的,但是反过来可以
function showObj(obj){
for(let key in obj){
console.log(key + " : " + obj[key]);
}
}