enumerable:True传入数据后,新增的不可被枚举出来。
发布于 7 年前 作者 jiazurongyu2015 2894 次浏览 来自 问答

在社区也学了一段时间,等在成长点多点反辅社区,做点输出。 有一个问题是这样的javascript enumerable:True可以被枚举,但根据下面的代码,发现不可被枚举。但是可通过 javascript person.hp被找到。

//JSON对象
var person = {
    name: "chendamao",
    work: "Tester",
    age: 35,
    school:"jialidun"
}
var keys =Object.keys(person);//获取对象属性的数组
console.log(keys);
var value=[];
var len=keys.length
for(var i=0;i<len;i++){
    var key =keys[i];
    console.log(keys[i])//==>获取key
    console.log(person[key]);//==>获取value person数组[key]拿到value
    value[i]=person[keys[i]];//赋予1个变量
    console.log('person --',key,":",value[i]);//遍历
}
console.log(person['name']) //console.log(person.name)
//enumerable:true可以被遍历
Object.defineProperty(person,"hp",{value:1500,enumerable:true}); //绑定hp和参数,但不和person共内存
console.log(person['hp']); //person.hp
console.log(keys) //没有遍历出来
2 回复

我按比较正常的写法重新来了一遍,你可以看一下。

你的写法,就最后一句有错误(见注释)。

const person = {
    name: "chendamao",
    work: "Tester",
    age: 35,
    school:"jialidun"
};

const values = [];

Object.keys(person).forEach((key) => {
    console.log(`person key: ${key}, value: ${person[key]}`)
    values.push(person[key])
})

Object.defineProperty(person,"hp",{ value:1500,enumerable:true }) //你的写法没有错

console.log(person['hp']) //这里可以正常打印出1500
console.log(Object.keys(person)) //person的key已经变了,变量keys保存的还是旧的,需要重新取

@soda-wy 十分感谢啊,我了解问题在哪里了。 前段日子被指派去做buffer那部分了。

回到顶部