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

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


当前回答

在您的情况下,您可以使用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也很熟悉)。

其他回答

您还可以检查数组的长度属性。当您尝试访问数组的长度属性时,它将返回一个数字(对于空数组为0),而如果您尝试访问对象的长度属性,则它将返回undefined。

if(Object.prototype.toString.call(arrayList) === '[object Array]') {
  console.log('Array!');
}

jQuery还提供了一个$.isArray()方法:

var a=[“a”,“AA”,“AAA”];if($.isArray(a)){alert(“a是一个数组!”);}其他{alert(“a不是数组!”);}<script src=“https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js“></script>

首先,您可以检查console.log(对象类型)。

如果输出是对象,则var{data}=对象,即根据对象键销毁对象。

函数可以是这样的:

const abc = (str1, str2=null) => {
    var result = [];
    result.push(str1);
    result.push(str2);
    return result.join("");
}

如果可以传递给此函数的仅有两种值是字符串或字符串数组,请保持简单,并使用字符串类型检查:

function someFunc(arg) {
    var arr = (typeof arg == "string") ? [arg] : arg;
}

Use:

var is_array = function (value) {
   return value &&
     typeof value === 'object' &&
     typeof value.length === 'number' &&
     typeof value.splice === 'function' &&
    !(value.propertyIsEnumerable('length'));
};

这个函数取自《JavaScript:TheGoodParts》一书,非常适合我。