JavaScript: проверьте, является ли объект массивом

Введение Работа с массивами в JavaScript - обычное дело. Иногда мы получаем переменную в JavaScript, которая должна быть массивом, но мы не уверены, что это так. Все непримитивные типы данных в сценариях JavaScripts являются объектами (функции имеют свой собственный тип, но они тоже являются объектами). В результате недостаточно использовать оператор typeof, который обычно используется для определения типа данных: let result = {subject: 'Science', mark: 97}; пусть числа = [1, 2, 3, 4, 5]; console.log (typeof resu

Вступление

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

comments powered by Disqus