我个人喜欢$ .each函数 - 它允许以简单和平等的方式处理数组和对象。但有时当应用程序的某些部分将非对象传递给该函数时,我得到运行时错误“无法获取未定义的属性长度”。
这样的错误实际上很难调试,因为不知道$ .each函数中的哪一个引起了它。所以我认为 - 在每次$ .each调用之前,我更容易进行对象检查。
如何检查对象是否适合$ .each函数?可能有一种方法来扩展jquery函数 - 至少知道发送到$ .each的是什么?因为过度搜索运行时错误非常困难 - 我在代码中有超过370个$ .each的用法......
提前致谢!
编辑:
var obj = {1: [{}, {}], 2: []};
$.each(obj, function(key, value){
$.each(value, function(index, el){
//fails with 'Uncaught TypeError: Cannot read property 'length' of undefined'
})
})
答案 0 :(得分:1)
我编写了一个简单的函数来检查对象是对象还是数组。
function isObjectValidForEach(obj) {
if( Object.prototype.toString.call(obj) === '[object Array]' || Object.prototype.toString.call(obj) === '[object Object]') {
return true;
}
return false;
}
var a = [];
isObjectValidForEach(a);
//true
var b = {};
isObjectValidForEach(b);
//true
var c = "hjgfkjwe";
isObjectValidForEach(c);
//false
您的代码将更改为
var obj = {1: [{}, {}], 2: []};
if(isObjectValidForEach(obj)) {
$.each(obj, function(key, value){
if(isObjectValidForEach(value)) {
$.each(value, function(index, el){
// your code
});
}
});
}