我正在尝试编写一个函数,它要么接受字符串列表,要么接受单个字符串。如果它是一个字符串,那么我想把它转换成一个只有一个项的数组,这样我就可以在上面循环,而不用担心出错。
那么如何检查变量是否为数组?
我正在尝试编写一个函数,它要么接受字符串列表,要么接受单个字符串。如果它是一个字符串,那么我想把它转换成一个只有一个项的数组,这样我就可以在上面循环,而不用担心出错。
那么如何检查变量是否为数组?
当前回答
检查对象是否为数组的最简单快捷的方法。
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);