我正在运行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
针对这两个返回值执行了typeof
和Object
运算符,但当然这会很愚蠢,因为Array
是Object
的后代true
,因此总是会返回{{1}}。
答案 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]';
};
}