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