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

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


当前回答

检查对象是否为数组的最简单快捷的方法。

var arr = [];
arr.constructor.name === 'Array'  // Returns true;

or

arr.constructor === Array // Returns true;

或者您可以创建一个实用函数:

const isArray = (obj) => !!obj && obj.constructor === Array;

用法:

isArray(arr); // Returns true

其他回答

假设您有以下阵列:

var arr = [1,2,3,4,5];

JavaScript(新浏览器和旧浏览器):

function isArray(arr) {
  return arr.constructor.toString().indexOf("Array") > -1;
}

or

function isArray(arr) {
  return arr instanceof Array;
}

or

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

然后这样称呼:

isArray(arr);

JavaScript(Internet Explorer 9+、Chrome 5+、Firefox 4+、Safari 5+和Opera 10.5+)

Array.isArray(arr);

jQuery:

$.isArray(arr);

角度:

angular.isArray(arr);

Undercore.js和Lodash:

_.isArray(arr);

这是我想出的一个解决方案,并一直用于我的项目。。。

function isArray (o) {
    return typeof o === "object" && o.length !== undefined;
}

isArray({}); // false
isArray(1); // false
isArray("str"); // false
isArray(function(){}); // false

isArray([]); // true

唯一的陷阱是,如果您的对象恰好具有长度属性,它将给出一个假阳性:

isArray({length:0}); // true

如果你对这个缺点很满意,并且知道你的纯对象没有这个属性,那么这是一个干净的解决方案,应该比Object.prototype.toString.call方法更快。

我现在找到了最短的答案:

变量x=[1,2,3]控制台日志(x.map?1:0)

检查此项的简单函数:

function isArray(object)
{
    return object.constructor === Array;
}

Array.isArray是实现这一点的方法。例如:

var arr = ['tuna', 'chicken', 'pb&j'];
var obj = {sandwich: 'tuna', chips: 'cape cod'};

// Returns true
Array.isArray(arr);

// Return false
Array.isArray(obj);