这是我的代码。问题在代码行中说明
<script>
// sample data created
var names = ['egard', 'roger'];
// object k is populated with a key and dynamic values
// depending on the list of names
// declare a new object
var k = {};
// create k properties according to names data
for (var i = 0; i < names.length; i++) {
if (k.hasOwnProperty(names[i])) {
k[names[i]] = false;
} else {
// value is dynamic, can be a number, char
// that will be used for other purposes
Object.defineProperty(k, names[i], {
value : true,
writable : true
});
}
};
// using jquery
$.each(k, function (i, me) {
// its not going here
console.log('jquery', me);
});
// using native iteration
for (var i in k) {
// its not going here
console.log('native', k[i]);
}
// what i want is to go inside the block
// of $.each or for ()
// so that i could iterate the object
// keys and its assign value
console.log(k);
// will output
Object {egard: true, roger: true}
console.log(k.egard);
// will output
// true
</script>
答案 0 :(得分:5)
问题在于您使用Object.defineProperty
。默认情况下,它将创建不可枚举的属性,顾名思义,这些属性不能被循环枚举。只需将enumerable
属性添加到定义:
Object.defineProperty(k, names[i], {
value : true,
writable : true,
enumerable : true
});
答案 1 :(得分:0)
您应该对这两个关键值保持谨慎,因为它们默认为false
:
<强>配置强> 当且仅当可以更改此属性描述符的类型并且可以从相应对象中删除属性时,才返回true。 默认为false。
<强>枚举强> 当且仅当在枚举相应对象的属性期间显示此属性时,才返回true。 默认为false。