在Javascript中区分数组与对象数据类型

时间:2015-06-23 02:43:12

标签: javascript jquery ajax

我正在运行AJAX请求,并返回JSON格式化的响应:

{
    name: "gideon",
    class: "knight",
    ...
}

[
    {
        name: "gideon",
        class: "knight",
        ...
    },
    {
        name: "athena",
        class: "mage",
        ...
    },
    ...
    {
        name: "chris",
        class: "B.O.W Agent",
        ....
    }
]

现在,我怎么知道返回的调用类型是Object还是Array个对象?我需要对此进行检查(以及其他检查):

$.ajax({
    ...,
    success: function(r) {
        if(/* r is an object */) {

        }
        else if(/* r is an array */) {
            // Perform an iteration
        }
    }
});

我已针对instanceof针对这两个返回值执行了typeofObject运算符,但当然这会很愚蠢,因为ArrayObject的后代true,因此总是会返回{{1}}。

2 个答案:

答案 0 :(得分:2)

使用Array.isArray()之类的

$.ajax({
    ...,
    success: function(r) {
        if(Array.isArray(r)) {
            // Perform an iteration
        }
        else if(/* r is an object */) {
        }
    }
});

答案 1 :(得分:1)

这取决于您需要支持哪些浏览器。

如果你只支持"现代"浏览器(例如IE9及以上版本),您可以使用(如@AmmarCSE建议的)ES5 isArray function

if (Array.isArray(r))

但是,如果您需要支持较旧的浏览器(例如,关闭IE8),则可以使用Object.prototype.toString

测试对象
Object.prototype.toString.call(r) === '[object Array]'

此外,如果您希望在支持旧版浏览器的同时使用Array.isArray,则可以向您的javascript添加以下isArray polyfill,使Array.isArray功能可用

if (!Array.isArray) {
  Array.isArray = function(arg) {
    return Object.prototype.toString.call(arg) === '[object Array]';
  };
}