1

我想迭代任何类型的 javascript 对象(在本例中为 IDBKeyRange)的属性和函数。

我尝试使用以下代码:-

  <script type="text/javascript">
    var arr = Object.getOwnPropertyNames(IDBKeyRange.only(43));
    for(var i=0;i<arr.length;i++) {
    document.write(arr[i]+"</br>");
    }
  </script>

但是,它没有向我显示属性和方法列表——我做错了什么?

4

2 回答 2

3

使用for-in循环:

for(var key in myObject){
    console.log(key, ':', myObject[key]);
}
于 2013-02-06T14:23:49.940 回答
0

Object.getOwnPropertyNames 返回一个键数组,即对象的属性名称。

您必须遍历数组并引用对象:

var O=// an object instance;
var A= Object.getOwnPropertyNames(O).map(function(itm){
    try{
        return itm+':'+O[itm];
    }
    catch(er){
        return itm+': ERROR!'+er.message;
    }
});

alert(A.join('\n'));

如果任何键引用对象,您将需要一个递归方法 -

function deepProps(O){
    var arr= Object.getOwnPropertyNames(O).map(function(itm){
        var hoo= O[itm];
        try{
            if(hoo== window){
                return '\n'+itm+': window';
            }
            if(hoo){
                if(hoo.nodeName) return itm+': '+ hoo.nodeName;
                if(typeof O[itm]== 'object'){
                    return '\n\n'+itm+':\n'+deepProps(O[itm]);
                }
                return itm+': '+O[itm];
            }
            return itm+': null';
        }
        catch(er){
            return itm+': '+ 'ERROR! '+er.message;
        }
    })
    return arr.join('\n');
}
于 2013-02-06T15:53:13.020 回答