我正在尝试编写一个函数,它要么接受字符串列表,要么接受单个字符串。如果它是一个字符串,那么我想把它转换成一个只有一个项的数组,这样我就可以在上面循环,而不用担心出错。
那么如何检查变量是否为数组?
我正在尝试编写一个函数,它要么接受字符串列表,要么接受单个字符串。如果它是一个字符串,那么我想把它转换成一个只有一个项的数组,这样我就可以在上面循环,而不用担心出错。
那么如何检查变量是否为数组?
当前回答
如果可以传递给此函数的仅有两种值是字符串或字符串数组,请保持简单,并使用字符串类型检查:
function someFunc(arg) {
var arr = (typeof arg == "string") ? [arg] : arg;
}
其他回答
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);
下面是一段代码片段,它将解释数组的一个重要事实,在学习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()方法确定输出是一个数组。
在现代浏览器中,您可以执行以下操作:
Array.isArray(obj)
(支持Chrome 5、Firefox 4.0、Internet Explorer 9、Opera 10.5和Safari 5)
为了实现向后兼容性,可以添加以下内容:
// Only implement if no native implementation is available
if (typeof Array.isArray === 'undefined') {
Array.isArray = function(obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
}
};
如果使用jQuery,可以使用jQuery.isArray(obj)或$.isArra(obj)。如果使用Undercore.js,可以使用_.isArray(obj。
如果不需要检测在不同帧中创建的阵列,也可以只使用instanceof:
obj instanceof Array
var a = [], b = {};
console.log(a.constructor.name == "Array");
console.log(b.constructor.name == "Object");
A = [1,2,3]
console.log(A.map == [].map)
为了寻找最短的版本,这是我到目前为止得到的。
注意,没有一个完美的函数能够始终检测所有可能的组合。与其期待一个神奇的工具,不如了解工具的所有能力和局限性。