Javascript 迭代创建的动态对象

Javascript Iterate on Dynamic Object Created

这是我的代码。问题在代码行

中说明
<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>

问题出在您对 Object.defineProperty 的使用上。默认情况下,它将创建 non-enumerable 属性,顾名思义,您的循环无法枚举这些属性。只需将 enumerable 属性 添加到定义中即可:

Object.defineProperty(k, names[i], {
  value : true,
  writable : true,
  enumerable : true
});

这里是 working version

您应该谨慎对待这两个键值,因为它们默认为 false

可配置 当且仅当此 属性 描述符的类型可以更改并且 属性 可以从相应的对象中删除时才为真。 默认为假。

可枚举 当且仅当此 属性 在相应对象的属性枚举期间出现时才为真。 默认为假。