Вступление
Работа с массивами в 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
и другие свойства
объекта, чтобы определить, является ли он массивом.