检查变量是否适合jQuery

时间:2015-03-08 19:28:30

标签: jquery

我个人喜欢$ .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'
    })

})

1 个答案:

答案 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
            });
       }
    });
}