Перейти к содержимому

Как проверить является ли объект массивом js

  • автор:

Array.isArray()

Метод Array.isArray() возвращает true , если объект является массивом и false , если он массивом не является.

Синтаксис

Array.isArray(obj)

Параметры

Объект для проверки.

Возвращаемое значение

true если объект является Array ; иначе, false .

Описание

Примеры

// Все следующие вызовы вернут true Array.isArray([]); Array.isArray([1]); Array.isArray(new Array()); // Малоизвестный факт: Array.prototype сам является массивом: Array.isArray(Array.prototype); // Все следующие вызовы вернут false Array.isArray(); Array.isArray(>); Array.isArray(null); Array.isArray(undefined); Array.isArray(17); Array.isArray("Array"); Array.isArray(true); Array.isArray(false); Array.isArray( __proto__: Array.prototype >); 

instanceof vs isArray

Когда проверяем экземпляр Array , Array.isArray предпочтительней, чем instanceof , потому что он работает и с iframes .

var iframe = document.createElement("iframe"); document.body.appendChild(iframe); xArray = window.frames[window.frames.length - 1].Array; var arr = new xArray(1, 2, 3); // [1,2,3] // Correctly checking for Array Array.isArray(arr); // true // Considered harmful, because doesn't work through iframes arr instanceof Array; // false 

Полифил

Выполнение следующего кода перед любым другим кодом создаст метод Array.isArray() , если он ещё не реализован в браузере.

if (!Array.isArray)  Array.isArray = function (arg)  return Object.prototype.toString.call(arg) === "[object Array]"; >; > 

Спецификации

Specification
ECMAScript Language Specification
# sec-array.isarray

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также

Found a content problem with this page?

  • Edit the page on GitHub.
  • Report the content issue.
  • View the source on GitHub.

This page was last modified on 4 авг. 2023 г. by MDN contributors.

Your blueprint for a better internet.

MDN

Support

  • Product help
  • Report an issue

Our communities

Developers

  • Web Technologies
  • Learn Web Development
  • MDN Plus
  • Hacks Blog
  • Website Privacy Notice
  • Cookies
  • Legal
  • Community Participation Guidelines

Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998– 2024 by individual mozilla.org contributors. Content available under a Creative Commons license.

Как проверить является ли переменная объектом js

Самый простой способ проверить, что переменная является объектом, это проверить тип переменной с помощью typeof . Для объектов эта инструкция вернёт строку ‘object’ .

// Создаём переменную const user =  name: 'Ivan' >; // Проверяем является ли переменная объектом if (typeof user === 'object')  console.log('is object'); > 

Стоит учитывать, что для null значение будет тоже ‘object’ , так как в системе типов JS null является объектом.

console.log(typeof null); // => object 

05 апреля 2023

Еще пара способов:

  • Использование метода Object.prototype.toString():
const obj =  a: 1, b: 2 >; if (Object.prototype.toString.call(obj) === '[object Object]')  console.log('Это объект'); > 
  • Использование оператора instanceof:
const obj =  a: 1, b: 2 >; if (obj instanceof Object)  console.log('Это объект'); > 

instanceof

Оператор instanceof проверяет, принадлежит ли объект к определённому классу. Другими словами, object instanceof constructor проверяет, присутствует ли объект constructor.prototype в цепочке прототипов object .

Интерактивный пример

Синтаксис

object instanceof constructor

Параметры

Функция-конструктор, на которую идёт проверка.

Описание

Оператор instanceof проверяет, присутствует ли объект constructor.prototype в цепочке прототипов object .

// объявляем конструкторы function C() > function D() > var o = new C(); // true, так как: Object.getPrototypeOf(o) === C.prototype o instanceof C; // false, так как D.prototype не присутствует в цепочке прототипов o o instanceof D; o instanceof Object; // true, так как: C.prototype instanceof Object; // true C.prototype = >; var o2 = new C(); o2 instanceof C; // true // false, так как C.prototype отсутствует в цепочке прототипов o o instanceof C; D.prototype = new C(); // add C to [[Prototype]] linkage of D var o3 = new D(); o3 instanceof D; // true o3 instanceof C; // true, так как C.prototype теперь присутствует в цепочке прототипов o3 

Обратите внимание: результат оператора instanceof зависит от свойства constructor.prototype , поэтому результат оператора может поменяться после изменения этого свойства. Также результат может поменяться после изменения прототипа object (или цепочки прототипов) с помощью Object.setPrototypeOf или нестандартного свойства __proto__ .

instanceof и множественные контексты (например, фреймы или окна)

Различные контексты имеют разные среды выполнения. Это означает, что они имеют различные built-ins (разный глобальный объект, различные конструкторы и т.д.). Это может давать неожиданные результаты. Например, [] instanceof window.frames[0].Array вернёт false , потому что Array.prototype !== window.frames[0].Array а массив наследуется от Array .

Это может казаться несущественной проблемой сначала, но при работе с несколькими фреймами или окнами, и передачи объектов из одного контекста в другой с помощью функций, это может стать серьёзной проблемой. С другой стороны, безопасно проверить, является ли некоторый объект массивом можно используя Array.isArray(myObj) .

Например, для проверки того, что Node является SVGElement (en-US) в разных контекстах можно использовать myNode instanceof myNode.ownerDocument.defaultView.SVGElement .

Примечание: Использование XPCOM instanceof в коде имеет специальный эффект: obj instanceof xpcomInterface (например Components.interfaces.nsIFile ) вызывает obj.QueryInterface(xpcomInterface) и возвращает true если проверка на QueryInterface прошла успешно. Побочным эффектом этого вызова является то, что можно использовать свойства xpcomInterface на obj после успешной проверки с помощью instanceof . В отличии от стандартных глобальных JavaScript типов, проверка obj instanceof xpcomInterface работает как ожидается, даже если obj относится к другому контексту.

Примеры

Показывает, что String и Date имеют тип Object и граничные случаи

Следующий код использует instanceof , чтобы показать что объекты String и Date также имеют тип Object (они являются наследниками Object ).

Однако, объекты, созданные с помощью литералов, являются исключениями — хотя их prototype равен undefined , выражение instanceof Object возвращает true .

var simpleStr = "Это обычная строка"; var myString = new String(); var newStr = new String("Строка, созданная с помощью конструктора"); var myDate = new Date(); var myObj = >; simpleStr instanceof String; // возвращает false, проверяет цепочку прототипов myString instanceof String; // возвращает true newStr instanceof String; // возвращает true myString instanceof Object; // возвращает true myObj instanceof Object; // возвращает true, несмотря на прототип, равный undefined (>) instanceof Object; // возвращает true, аналогично предыдущей строчке myString instanceof Date; // возвращает false myDate instanceof Date; // возвращает true myDate instanceof Object; // возвращает true myDate instanceof String; // возвращает false 

Показывает, что mycar имеет тип Car и тип Object

Следующий код создаёт тип Car и экземпляр этого типа, mycar . Оператор instanceof показывает, что объект mycar имеет тип Car и тип Object .

function Car(make, model, year)  this.make = make; this.model = model; this.year = year; > var mycar = new Car("Honda", "Accord", 1998); var a = mycar instanceof Car; // возвращает true var b = mycar instanceof Object; // возвращает true 

Спецификации

Specification
ECMAScript Language Specification
# sec-relational-operators

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также

Found a content problem with this page?

  • Edit the page on GitHub.
  • Report the content issue.
  • View the source on GitHub.

This page was last modified on 6 янв. 2024 г. by MDN contributors.

Your blueprint for a better internet.

Как проверить является ли переменная массивом js

Для того, чтобы проверить является ли переменная массивом, можно воспользоваться встроенным методом Array.isArray() .

const numbers = [1, 2, 3]; console.log(Array.isArray(numbers)); // => true console.log(Array.isArray([])); // => true console.log(Array.isArray(<>)); // => false console.log(Array.isArray('')); // => false 

20 октября 2022

Предлагаю воспользоваться оператором instanceof:

const letters = ['a', 'b', 'c']; const number = 5; const text = 'Dracaris!'; const user =  name: 'Vasiliy', age: 15 >; console.log(letters instanceof Array) // => true console.log(number instanceof Array) // => false console.log(text instanceof Array) // => false console.log(user instanceof Array) // => false 
Документация:
  • instanceof

04 января 2023

Предлагаю на рассмотрение такой метод:

; const number = 5; console.log(typeof arr === 'object' && arr !== null && arr.length >= 0) // => true console.log(typeof arrEmpty === 'object' && arrEmpty !== null && arrEmpty.length >= 0) // => true console.log(typeof text === 'object' && text !== null && text.length >= 0) // => false console.log(typeof object === 'object' && object !== null && object.length >= 0) // => false console.log(typeof number === 'object' && number !== null && number.length >= 0) // => false 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *