我想迭代任何类型的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>
但是,它没有向我显示属性和方法的列表 - 我做错了什么?
答案 0 :(得分:3)
使用for-in
循环:
for(var key in myObject){
console.log(key, ':', myObject[key]);
}
答案 1 :(得分:0)
Object.getOwnPropertyNames返回键的数组,即Object的属性名称。
您必须遍历数组并引用对象:
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');
}