6

假设我有这样的功能:

function foo(bar) {
    if (bar > 1) {
       return [1,2,3];
    } else {
       return 1;
    }
}

说我打电话foo(1),我怎么知道它是否返回一个数组?

4

5 回答 5

16

我使用这个功能:

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

jQuery.isArray的实现方式。

检查这篇文章:

于 2009-07-29T20:34:58.783 回答
3
if(foo(1) instanceof Array)
    // You have an Array
else
    // You don't

更新:我必须回应下面的评论,因为人们仍然声称如果不亲自尝试,这将无法工作......

对于其他一些对象,此技术不起作用(例如“” instanceof String == false),但这适用于Array。我在 IE6、IE8、FF、Chrome 和 Safari 中对其进行了测试。在下面发表评论之前,先试试看。

于 2009-07-29T20:32:07.217 回答
2

这是一种非常可靠的方法,取自 Javascript:O'Reilly 发布的好的部分:

if (my_value && typeof my_value === 'object' &&  typeof my_value.length === 'number' &&
!(my_value.propertyIsEnumerable('length')) { // my_value is truly an array! }

我建议将其包装在您自己的函数中:

function isarray(my_value) {

    if (my_value && typeof my_value === 'object' &&  typeof my_value.length === 'number' &&
        !(my_value.propertyIsEnumerable('length')) 
         { return true; }
    else { return false; }
}
于 2009-07-30T18:05:10.477 回答
2

从 ES5 开始,有isArray.

Array.isArray([])  // true
于 2017-06-15T00:05:38.253 回答
-1

为了使您的解决方案更通用,您可能不在乎它是否实际上是一个 Array 对象。例如,document.getElementsByName() 返回一个“行为类似于”数组的对象。如果对象具有“长度”属性,则可以假定“数组符合性”。

function is_array_compliant(obj){
    return obj && typeof obj.length != 'undefined';
}
于 2009-07-30T16:42:19.783 回答