Вступление
Работа с массивами в JavaScript - обычное дело. Иногда мы получаем переменную в JavaScript, которая должна быть массивом, но мы не уверены, что это так.
Все непримитивные типы данных в сценариях JavaScripts являются объектами
(функции имеют свой собственный тип, но они тоже являются объектами). В
результате недостаточно использовать typeof который обычно
используется для определения типа данных:
let result = { subject: 'Science', marks: 97 };
let numbers = [1, 2, 3, 4, 5];
console.log(typeof result); // Object
console.log(typeof numbers); // Object
В этой статье мы рассмотрим, как проверить, является ли данная переменная или значение массивом или нет, в JavaScript.
Использование метода Array.isArray ()
Как следует из названия, этот метод можно использовать, чтобы
определить, является ли данный аргумент массивом или нет. Он возвращает
логическое значение ( true / false ) с результатом.
Например, со следующими переменными метод Array.isArray() правильно
определяет, являются они одним или нет:
let result = { subject: "Science", marks: 97 }; // Object
let numbers = [1, 2, 3, 4, 5]; // Array
let name = "Mark"; // String
let names = new Array("Jill", "Jane", "Jacqueline");
console.log(Array.isArray(result)); // false
console.log(Array.isArray(numbers)); // true
console.log(Array.isArray(name)); // false
console.log(Array.isArray(names)); // true
Использование свойства конструктора объекта
Каждый объект имеет constructor (кроме объектов, созданных с помощью
Object.create(null) , что маловероятно). Мы можем сравнить свойство
конструктора напрямую с функциями конструктора JavaScript.
Следовательно, если мы сравним его с функцией конструктора массива, мы
узнаем, является ли это массивом.
Примечание . Функция-конструктор - это функция, которая
инициализирует объект. Если вы создали объект с помощью new , вы
сделали это с помощью функции-конструктора. Например, в
let myArray = new Array(1, 2) используется функция конструктора
Array() .
Вы можете использовать свойство конструктора, чтобы определить, является ли переменная массивом:
let result = { subject: "Science", marks: 97 };
let numbers = [1, 2, 3, 4, 5];
let name = "Mark";
let names = new Array("Jill", "Jane", "Jacqueline");
console.log(result.constructor === Array); // false
console.log(numbers.constructor === Array); // true
console.log(name.constructor === Array); // false
console.log(names.constructor === Array); // true
Использование оператора instanceof
Оператор instanceof проверяет, найдена ли функция-конструктор в
цепочке прототипов объекта. Если вы менее знакомы с прототипным
наследованием JavaScript, оператор проверяет, был ли объект создан
классом, а если нет, проверяет, был ли объект производным от этого
класса.
Как и typeof , он возвращает логическое значение. Чтобы определить,
является ли переменная массивом, мы можем использовать instanceof
следующим образом:
let result = { subject: "Science", marks: 97 };
let numbers = [1, 2, 3, 4, 5];
let name = "Mark";
let names = new Array("Jill", "Jane", "Jacqueline");
console.log(result instanceof Array); // false
console.log(numbers instanceof Array); // true
console.log(name instanceof Array); // false
console.log(names instanceof Array); // true
Использование метода Object.prototype.call ()
Все объекты в JavaScript наследуют свойства от основного
объекта-прототипа, метко названного Object.prototype . toString()
существует в Object.prototype , поэтому каждый объект имеет
собственный метод toString() Метод toString() объекта
Object.prototype отображает тип объекта.
call() метод объектов выполняет функцию , но изменяет значение this
для объекта , переданного в его аргументах , т.е. позволяет объекту
использовать метод из другого объекта.
Следовательно, мы можем использовать Object.prototype.toString() для
печати типа, а затем использовать call() чтобы это было сделано для
другого объекта. Затем мы сравниваем это строковое значение, чтобы
определить, является ли оно массивом:
let result = { subject: "Science", marks: 97 };
let numbers = [1, 2, 3, 4, 5];
let name = "Mark";
let names = new Array("Jill", "Jane", "Jacqueline");
console.log(Object.prototype.toString.call(result)); // [object Object]
console.log(Object.prototype.toString.call(numbers)); // [object Array]
console.log(Object.prototype.toString.call(name)); // [object String]
console.log(Object.prototype.toString.call(names)); // [object Array]
console.log(Object.prototype.toString.call(result) === "[object Array]"); // false
console.log(Object.prototype.toString.call(numbers) === "[object Array]"); // true
console.log(Object.prototype.toString.call(name) === "[object Array]"); // false
console.log(Object.prototype.toString.call(names) === "[object Array]"); // true
Маловероятно, что вы воспользуетесь этим методом, но никогда не помешает узнать больше об объектах JavaScript!
Заключение
В этой статье мы рассмотрели несколько способов в JavaScript определить,
является ли объект массивом. Самый простой метод - это метод
Array.isArray() , который, скорее всего, будет использоваться в
производственной среде.
Однако мы всегда можем использовать instanceof и другие свойства
объекта, чтобы определить, является ли он массивом.