Обнаружьте, если параметр передал, массив? JavaScript [дубликат]

48
задан Community 23 May 2017 в 12:02
поделиться

6 ответов

if (param instanceof Array)
    ...

Править. По состоянию на 2016 год существует готовый метод, который улавливает больше угловых случаев, Array.isArray , используемый следующим образом:

if (Array.isArray(param))
    ...
67
ответ дан 26 November 2019 в 18:47
поделиться

Я нашел это здесь :

function isArray(obj) {
    return obj.constructor == Array; 
}

также этот

function isArray(obj) {
    return (obj.constructor.toString().indexOf(”Array”) != -1);
}
5
ответ дан 26 November 2019 в 18:47
поделиться

Вы можете протестировать свойство конструктора :

if (param.constructor == Array) {
    ...
}

Хотя это будет включать объекты, которые имеют прототип массива,

function Stack() {
}
Stack.prototype = [];

, если они также не определяют конструктор:

Stack.prototype.constructor = Stack;

или:

function Stack() {
    this.constructor = Stack;
}
1
ответ дан 26 November 2019 в 18:47
поделиться

Duck Typying

На самом деле, вам не обязательно проверять, является ли объект массивом. Вы должны набрать его, и единственное, что вы хотите, чтобы этот объект реализовал, - это свойство length . После этого вы можете преобразовать его в массив:

var arrayLike = {
    length : 3,

    0: "foo"
};

// transform object to array
var array = Array.prototype.slice.call(arrayLike);

JSON.stringify(array); // ["foo", null, null]

Array.prototype.slice.call (object) преобразует в массив каждый объект, который предоставляет свойство length . В случае строк, например:

var array = Array.prototype.slice.call("123");
JSON.stringify(array); // ["1", "2", "3"]

Этот метод не совсем работает в IE6 (я не знаю о более поздних версиях), но легко создать небольшую служебную функцию для преобразования объектов в массивах.

-1
ответ дан 26 November 2019 в 18:47
поделиться

Это подход, который использует jQuery 1.4.2:

var toString = param.prototype.toString;
var isArray = function(obj) {
        return toString.call(obj) === "[object Array]";
    }
18
ответ дан 26 November 2019 в 18:47
поделиться

Несколько дней назад я создавал простую функцию определения типов, возможно, она вам пригодится:

Использование:

//...
if (typeString(obj) == 'array') {
  //..
}

Реализация:

function typeString(o) {
  if (typeof o != 'object')
    return typeof o;

  if (o === null)
      return "null";
  //object, array, function, date, regexp, string, number, boolean, error
  var internalClass = Object.prototype.toString.call(o)
                                               .match(/\[object\s(\w+)\]/)[1];
  return internalClass.toLowerCase();
}

второй вариант этой функции более строгий, поскольку возвращает только типы объектов, описанные в спецификации ECMAScript (возможные выходные значения: "object", "undefined", "null", и "function", "array", "date", "regexp", "string", "number", "boolean" "error", используя [[Class]] внутреннее свойство).

1
ответ дан 26 November 2019 в 18:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: