说我有一个功能,像这样:

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

说我打电话 foo(1), 我怎知道它返回阵列,或者没有?

有帮助吗?

解决方案

我用这个功能:

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

是的方式 的!isArray 实施。

检查这篇文章:

其他提示

if(foo(1) instanceof Array)
    // You have an Array
else
    // You don't

更新:我必须回复下面的评论,因为人们仍然声称如果不自己尝试就行不行......

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

这是一种非常可靠的方式,取自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; }
}

从ES5开始, <代码> IsArray的

Array.isArray([])  // true

为了使您的解决方案更通用,您可能不关心它是否实际上是一个Array对象。例如,document.getElementsByName()返回一个“表现得像”的对象。数组。 “阵列合规性”如果对象具有“长度”,则可以假设属性。

function is_array_compliant(obj){
    return obj && typeof obj.length != 'undefined';
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top