我正在尝试编写一个函数,它要么接受字符串列表,要么接受单个字符串。如果它是一个字符串,那么我想把它转换成一个只有一个项的数组,这样我就可以在上面循环,而不用担心出错。

那么如何检查变量是否为数组?


当前回答

如果您知道对象没有concat方法,可以使用以下方法。

var arr=[];if(arr.concat类型==“函数”){console.log(“这是一个数组”);}

其他回答

您可以使用此函数获取数据类型。

var myAr = [1,2];

checkType(myAr);

function checkType(data) {
  if(typeof data ==='object') {
    if(Object.prototype.toString.call(data).indexOf('Array') !== (-1)) {
      return 'array';
    } else {
      return 'object';
    }
  } else {
    return typeof data;
  }
}

if(checkType(myAr) === 'array') {
  console.log('yes, it is an array')
};

因为我不喜欢任何Object.prototype调用,所以我寻找了另一种解决方案。特别是因为ChaosPandion的解决方案并不总是有效的,并且MidnightTortoise的isArray()解决方案不适用于来自DOM的数组(如getElementsByTagName)。最后,我找到了一个简单的跨浏览器解决方案,这可能也适用于Netscape 4

只有这四行(检查任何对象h):

function isArray(h){
    if((h.length!=undefined&&h[0]!=undefined)||(h.length===0&&h[0]===undefined)){
        return true;
    }
    else{ return false; }
}

我已经测试了这些数组(全部返回true):

1) array=d.getElementsByName('some_element'); //'some_element' can be a real or unreal element
2) array=[];
3) array=[10];
4) array=new Array();
5) array=new Array();
   array.push("whatever");

这适用于所有情况吗?或者我的解决方案不起作用?

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

var ar = ["ff","tt"]
alert(isArray(ar))

你可以试试这个:

var arr = []; (or) arr = new Array();
var obj = {}; (or) arr = new Object();

arr.constructor.prototype.hasOwnProperty('push') //true

obj.constructor.prototype.hasOwnProperty('push') // false

测试输入值是否为数组的简单函数如下:

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

这可以跨浏览器使用,也可以使用较旧的浏览器。本文摘自T.J.Crowders的博客文章