我正在尝试编写一个函数,它要么接受字符串列表,要么接受单个字符串。如果它是一个字符串,那么我想把它转换成一个只有一个项的数组,这样我就可以在上面循环,而不用担心出错。
那么如何检查变量是否为数组?
我正在尝试编写一个函数,它要么接受字符串列表,要么接受单个字符串。如果它是一个字符串,那么我想把它转换成一个只有一个项的数组,这样我就可以在上面循环,而不用担心出错。
那么如何检查变量是否为数组?
当前回答
下面是一段代码片段,它将解释数组的一个重要事实,在学习JavaScript时应该尽早了解这些事实(与我不同)。
//此函数将字符串放入数组中var stringInsideArray=函数(输入){if(输入类型==“string”){返回[输入];}else if(Array.isArray(输入)){返回输入;}其他{throw new Error(“输入不是字符串!”);}}var output=stringInsideArray('hello');console.log('第一步输出:',输出);//[“你好”]//使用typeof方法验证输出是否为对象console.log('第二步输出:',输出类型);//对象//使用Array.isArray()方法验证输出是否为数组console.log('第三步输出:',Array.isArray(输出));//真的
数组实际上是对象。
使用typeof运算符,stringInsideArray('hello')的输出证明[“hello”]确实是一个对象。这让我困惑了很长一段时间,因为我假设数组是JavaScript数据类型。。。
只有七种JavaScript数据类型,数组不是其中之一。
要回答您的问题,请使用Array.isArray()方法确定输出是一个数组。
其他回答
下面是一段代码片段,它将解释数组的一个重要事实,在学习JavaScript时应该尽早了解这些事实(与我不同)。
//此函数将字符串放入数组中var stringInsideArray=函数(输入){if(输入类型==“string”){返回[输入];}else if(Array.isArray(输入)){返回输入;}其他{throw new Error(“输入不是字符串!”);}}var output=stringInsideArray('hello');console.log('第一步输出:',输出);//[“你好”]//使用typeof方法验证输出是否为对象console.log('第二步输出:',输出类型);//对象//使用Array.isArray()方法验证输出是否为数组console.log('第三步输出:',Array.isArray(输出));//真的
数组实际上是对象。
使用typeof运算符,stringInsideArray('hello')的输出证明[“hello”]确实是一个对象。这让我困惑了很长一段时间,因为我假设数组是JavaScript数据类型。。。
只有七种JavaScript数据类型,数组不是其中之一。
要回答您的问题,请使用Array.isArray()方法确定输出是一个数组。
如果您知道对象没有concat方法,可以使用以下方法。
var arr=[];if(arr.concat类型==“函数”){console.log(“这是一个数组”);}
我见过的最佳解决方案是用跨浏览器替换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 */};
这是我想出的一个解决方案,并一直用于我的项目。。。
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方法更快。
您可以使用此函数获取数据类型。
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')
};