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

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


当前回答

异国情调的

您想检查参数是否为字符串,所以请尝试

x===x+''

设isStr=x=>x===x+'';console.log(isStr([]));console.log(isStr([“aa”,“bb”]));console.log(isStr(“”));console.log(isStr(“abc”));

其他回答

function isArray(value) {
    if (value) {
        if (typeof value === 'object') {
            return (Object.prototype.toString.call(value) == '[object Array]')
        }
    }
    return false;
}

var ar = ["ff","tt"]
alert(isArray(ar))

最好的做法是使用构造函数进行比较,如下所示

if(some_variable.constructor === Array){
  // do something
}

您也可以使用其他方法,如typeOf,将其转换为字符串,然后进行比较,但将其与dataType进行比较总是更好的方法。

我首先检查您的实现是否支持isArray:

if (Array.isArray)
    return Array.isArray(v);

也可以尝试使用instanceof运算符

v instanceof Array

正如MDN在这里所说:

使用Array.isArray或Object.prototype.toString.call进行区分阵列中的常规对象

这样地:

Object.pr原型.toString.call(arr)==“[对象数组]”,或Array.isArray(arr)

这是我在考虑到以下评论的情况下对这个答案进行改进的尝试:

var isArray = myArray && myArray.constructor === Array;

它消除了if/else,并考虑了数组为空或未定义的可能性