我正在尝试编写一个函数,它要么接受字符串列表,要么接受单个字符串。如果它是一个字符串,那么我想把它转换成一个只有一个项的数组,这样我就可以在上面循环,而不用担心出错。
那么如何检查变量是否为数组?
我正在尝试编写一个函数,它要么接受字符串列表,要么接受单个字符串。如果它是一个字符串,那么我想把它转换成一个只有一个项的数组,这样我就可以在上面循环,而不用担心出错。
那么如何检查变量是否为数组?
当前回答
检查其原型和Array.isArray之间存在差异:
function isArray(obj){
return Object.getPrototypeOf(obj) === Array.prototype
}
此函数将直接检查obj是否为数组。
但对于此代理对象:
var arr = [1,2,3]
var proxy = new Proxy(arr,{})
console.log(Array.isArray(proxy)) // true
Array.isArray将其作为Array。
其他回答
Stoyan Stefanov的《JavaScript模式》一书中有一个很好的例子,它应该处理所有可能的问题,并使用ECMAScript 5方法Array.isArray()。
这里是:
if (typeof Array.isArray === "undefined") {
Array.isArray = function (arg) {
return Object.prototype.toString.call(arg) === "[object Array]";
};
}
顺便说一下,如果使用jQuery,可以使用其方法$.isArray()。
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);
您可以通过如下推送找到:
函数isArray(obj){return(obj.push类型==“函数”)?真:假;}var array=new array();或var数组=[‘a’,‘b’,‘c’];console.log(isArray(数组));
在您的情况下,您可以使用Array的concat方法,它可以接受单个对象,也可以接受数组(甚至组合):
function myFunc(stringOrArray)
{
var arr = [].concat(stringOrArray);
console.log(arr);
arr.forEach(function(item, i)
{
console.log(i, "=", item);
})
}
myFunc("one string");
myFunc(["one string", "second", "third"]);
concat似乎是Array最古老的方法之一(即使是IE 5.5也很熟悉)。
Use:
var is_array = function (value) {
return value &&
typeof value === 'object' &&
typeof value.length === 'number' &&
typeof value.splice === 'function' &&
!(value.propertyIsEnumerable('length'));
};
这个函数取自《JavaScript:TheGoodParts》一书,非常适合我。