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

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


当前回答

正如MDN在这里所说:

使用Array.isArray或Object.prototype.toString.call进行区分阵列中的常规对象

这样地:

Object.pr原型.toString.call(arr)==“[对象数组]”,或Array.isArray(arr)

其他回答

jQuery还提供了一个$.isArray()方法:

var a=[“a”,“AA”,“AAA”];if($.isArray(a)){alert(“a是一个数组!”);}其他{alert(“a不是数组!”);}<script src=“https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js“></script>

您可以通过如下推送找到:

函数isArray(obj){return(obj.push类型==“函数”)?真:假;}var array=new array();或var数组=[‘a’,‘b’,‘c’];console.log(isArray(数组));

您可以使用isArray方法,但我更愿意检查:

Object.getPrototypeOf(yourvariable)==Array.prototype

A = [1,2,3]
console.log(A.map == [].map)

为了寻找最短的版本,这是我到目前为止得到的。

注意,没有一个完美的函数能够始终检测所有可能的组合。与其期待一个神奇的工具,不如了解工具的所有能力和局限性。

我见过的最佳解决方案是用跨浏览器替换typeof。检查Angus Croll的解决方案。

TL;DR版本在下面,但这篇文章对这个问题进行了很好的讨论,所以如果您有时间,应该阅读它。

Object.toType = function(obj) {
    return ({}).toString.call(obj).match(/\s([a-z|A-Z]+)/)[1].toLowerCase();
}
// ... and usage:
Object.toType([1,2,3]); //"array" (all browsers)

// or to test...
var shouldBeAnArray = [1,2,3];
if(Object.toType(shouldBeAnArray) === 'array'){/* do stuff */};