Object
Тип Object
позначає один із типів даних JavaScript. Його використовують для зберігання різноманітних асоціативних масивів та складніших сутностей. Об'єкти можна створювати за допомогою конструктора Object()
та синтаксису об'єктного ініціалізатора / літерала.
Опис
Майже всі об'єкти у JavaScript — це примірники Object
; типовий об'єкт успадковує властивості (включно з методами) від Object.prototype
, хоча ці властивості можна затінювати (явище, відоме як заміщення). Єдині об'єкти, котрі не успадковують від Object.prototype
– ті, котрі мають прототип null
чи походять від інших об'єктів з прототипом null
.
Зміни у прототипному об'єкті Object
видимі всім об'єктам через ланцюжок прототипів, окрім тих випадків, коли змінені властивості й методи заміщені далі в прототипному ланцюжку. Це надає надзвичайно потужний, хоча й потенційно небезпечний, механізм для заміщення чи розширення поведінки об'єктів. Аби зробити його безпечнішим, Object.prototype
є єдиним об'єктом в ядрі мови JavaScript, що має незмінний прототип: прототип Object.prototype
завжди тотожний null
і не може бути змінений.
Властивості прототипу об'єкта
Слід уникати виклику будь-яких методів Object.prototype
безпосередньо з примірника, особливо тих, котрі не створені поліморфними (тобто лише їхня початкова логіка має зміст, і жодний об'єкт-нащадок не зможе перевизначити їх у змістовний спосіб). Усі об'єкти, що походять від Object.prototype
, можуть визначати власні властивості, що мають ідентичні імена, але з геть інакшою семантикою, ніж та, на котру ви очікуєте. Понад те, ці властивості не успадковуються null
-прототипними об'єктами. Усі сучасні службові засоби JavaScript для роботи з об'єктами є статичними. Конкретніше:
valueOf()
,toString()
іtoLocaleString()
існують заради поліморфності, і слід очікувати, що об'єкт визначає власну реалізацію з доцільною логікою, тож їх можна викликати як методи примірника. ПротеvalueOf()
іtoString()
зазвичай неявно викликаються під час перетворення типів, і їх немає потреби самотужки викликати у своєму коді.__defineGetter__()
,__defineSetter__()
,__lookupGetter__()
і__lookupSetter__()
– нерекомендовані до використання. Натомість слід використовувати статичні альтернативиObject.defineProperty()
іObject.getOwnPropertyDescriptor()
.- Властивість
__proto__
нерекомендована до використання. АльтернативиObject.getPrototypeOf()
іObject.setPrototypeOf()
є статичними методами. - Методи
propertyIsEnumerable()
іhasOwnProperty()
можуть бути замінені статичними методамиObject.getOwnPropertyDescriptor()
іObject.hasOwn()
відповідно. - Метод
isPrototypeOf()
зазвичай може бути заміненийinstanceof
, якщо перевіряється властивість конструктораprototype
.
У випадку, коли семантично рівносильний статичний метод не існує, або коли є охота використати саме метод Object.prototype
, слід безпосередньо викликати call()
метода з Object.prototype
, аби запобігти спрацюванню перевизначеної властивості об'єкта, що виробляє неочікувані результати.
const obj = {
foo: 1,
// Не слід визначати такий метод на власному об'єкті,
// але може бути неможливо цьому запобігти,
// якщо об'єкт надходить зовні
propertyIsEnumerable() {
return false;
},
};
obj.propertyIsEnumerable("foo"); // false; неочікуваний результат
Object.prototype.propertyIsEnumerable.call(obj, "foo"); // true; очікуваний результат
Видалення властивості з об'єкта
Не існує в Object
такого методу, який би давав змогу видаляти його власні властивості (подібно до Map.prototype.delete()
). Для цього необхідно використовувати оператор видалення (delete
).
null-прототипні об'єкти
Майже всі об'єкти в JavaScript врешті решт успадковують від Object.prototype
(дивіться успадкування і ланцюжок прототипів). Проте null
-прототипні об'єкти можна створити за допомогою Object.create(null)
або синтаксису ініціалізатора об'єкта з __proto__:null
(примітка: ключ __proto__
в об'єктному літералі відрізняється від нерекомендованої властивості Object.prototype.__proto__
). Також можна замінити прототип наявного об'єкта на null
шляхом виклику Object.setPrototypeOf(obj, null)
.
const obj = Object.create(null);
const obj2 = { __proto__: null };
Об'єкт з прототипом null
може поводитись у неочікуваний спосіб, тому що не успадковує жодних методів об'єкта від Object.prototype
. Це особливо важливо при зневадженні, адже загальновживані службові функції для перетворення й перевірки властивостей об'єкта можуть породжувати помилки чи втрачати інформацію (особливо при використанні мовчазних пасток для помилок, що ігнорують помилки).
Наприклад, відсутність Object.prototype.toString()
нерідко робить зневадження проблематичним:
const normalObj = {}; // створення звичайного об'єкта
const nullProtoObj = Object.create(null); // створення об'єкта з прототипом "null"
console.log(`normalObj – це ${normalObj}`); // виводить "normalObj – це [object Object]"
console.log(`nullProtoObj – це ${nullProtoObj}`); // викидає помилку: Cannot convert object to primitive value
alert(normalObj); // виводить [object Object]
alert(nullProtoObj); // викидає помилку: Cannot convert object to primitive value
Інші методи також не матимуть успіху.
normalObj.valueOf(); // виводить {}
nullProtoObj.valueOf(); // викидає помилку: nullProtoObj.valueOf is not a function
normalObj.hasOwnProperty("p"); // виводить "true"
nullProtoObj.hasOwnProperty("p"); // викидає помилку: nullProtoObj.hasOwnProperty is not a function
normalObj.constructor; // виводить "Object() { [native code] }"
nullProtoObj.constructor; // виводить "undefined"
Можна повернути null
-прототипному об'єкту метод toString
шляхом безпосереднього присвоєння:
nullProtoObj.toString = Object.prototype.toString; // Оскільки новий об'єкт не має toString, додаймо оригінальну узагальнену реалізацію
console.log(nullProtoObj.toString()); // виводить "[object Object]"
console.log(`nullProtoObj – це ${nullProtoObj}`); // виводить "nullProtoObj – це [object Object]"
На відміну від звичайних об'єктів, котрі мають toString()
на своєму прототипі, у цьому випадку toString()
є власною властивістю nullProtoObj
. Це пов'язано з тим, що nullProtoObj
не має прототипу (має прототип null
).
null-прототипний об'єкт можна знову зробити звичайним об'єктом: Object.setPrototypeOf(nullProtoObj, Object.prototype)
.
На практиці об'єкти з прототипом null
зазвичай використовуються як дешевий замінник відображень. Присутність властивостей Object.prototype
призводить до певних проблем:
const ages = { alice: 18, bob: 27 };
function hasPerson(name) {
return name in ages;
}
function getAge(name) {
return ages[name];
}
hasPerson("hasOwnProperty"); // true
getAge("toString"); // [Function: toString]
Використання null
-прототипного об'єкта усуває цю небезпеку, не приносячи забагато складності до функцій hasPerson
і getAge
:
const ages = Object.create(null, {
alice: { value: 18, enumerable: true },
bob: { value: 27, enumerable: true },
});
hasPerson("hasOwnProperty"); // false
getAge("toString"); // undefined
У такому випадку методи слід додавати обережно, адже вони можуть конфліктувати з іншими парами ключ-значення, збереженими як дані.
Створення об'єктів, що не успадковують від Object.prototype
, також запобігає атакам забруднення прототипу. Якщо зловмисний сценарій додасть властивість до Object.prototype
, то вона буде доступна на кожному об'єкті програми, окрім тих, котрі мають прототип null
.
const user = {};
// Зловмисний сценарій:
Object.prototype.authenticated = true;
// Неочікувано дозволяє пройти далі неавторизованому користувачеві
if (user.authenticated) {
// доступ до конфіденційних даних
}
JavaScript також має вбудовані API, що виробляють null
-прототипні об'єкти, особливо ті, що використовують об'єкти як імпровізовані колекції ключ-значення. Наприклад:
- Повернене значення
Object.groupBy()
- Властивості
groups
таindices.groups
результатуRegExp.prototype.exec()
Array.prototype[Symbol.unscopables]
(усі об'єктиSymbol.unscopables
повинні мати прототипnull
)import.meta
- Об'єкти простору імен модулів, отримані за допомогою
import * as ns from "module";
абоimport()
Термін "null
-прототипний об'єкт" також включає будь-які об'єкти, що не містять у своєму ланцюжку прототипів Object.prototype
. При використанні класів такі об'єкти можуть бути створені за допомогою extends null
.
Зведення до об'єкта
Чимало вбудованих операцій, котрі очікують отримати об'єкти, спершу зводять свої аргументи до об'єктів. Ця операція може бути підсумована так:
- Об'єкти повертаються як є.
undefined
іnull
викидаютьTypeError
.- Примітиви
Number
,String
,Boolean
,Symbol
,BigInt
загортаються у відповідні собі об'єктні обгортки.
Найкращий спосіб досягнути в JavaScript такого самого ефекту – конструктор Object()
. Object(x)
перетворює x
на об'єкт, а для undefined
та null
це повертає простий об'єкт, а не викидає TypeError
.
Серед місць, що використовують зведення до об'єкта:
- Параметр циклу
for...in
object
. - Значення
this
методівArray
. - Параметри методів
Object
, як тоObject.keys()
. - Автоматичне запаковування, коли відбувається звертання до властивості на примітивному значенні, адже примітиви не мають властивостей.
- Значення
this
при виклику несуворої функції. Примітиви запаковуються, аnull
іundefined
замінюються глобальним об'єктом.
На відміну від перетворення на примітив, зведення до об'єкта не можна жодним чином перехопити, адже воно не викличе жодного самописного коду, як то методів toString
чи valueOf
.
Конструктор
Object()
Перетворює передане значення на об'єкт.
Статичні методи
Object.assign()
(присвоїти)Копіює значення всіх власних перелічуваних властивостей з одного чи більше об'єктів-донорів у цільовий об'єкт.
Object.create()
(створити)Створює новий об'єкт зі вказаним прототипним об'єктом і властивостями.
Object.defineProperties()
(означити властивості)Додає до об'єкта названі властивості, описані переданими дескрипторами.
Object.defineProperty()
(означити властивість)Додає до об'єкта названу властивість, описану переданим дескриптором.
Object.entries()
(записи)Повертає масив, що містить всі пари
[ключ, значення]
власних перелічуваних властивостей (з рядковими ключами) переданого об'єкта.Object.freeze()
(заморозити)Заморожує об'єкт. Інший код не може видаляти або змінювати його властивості.
Object.fromEntries()
(із записів)Створює новий об'єкт на основі переданого ітератора пар
[ключ, значення]
. (Це — обернений метод доObject.entries
).Object.getOwnPropertyDescriptor()
(взяти дескриптор власної властивості)Повертає дескриптор вказаної властивості об'єкта.
Object.getOwnPropertyDescriptors()
(взяти дескриптори власних властивостей)Повертає об'єкт, що містить дескриптори всіх власних властивостей переданого об'єкта.
Object.getOwnPropertyNames()
(взяти імена власних властивостей)Повертає масив, що містить імена всіх власних перелічуваних і неперелічуваних властивостей переданого об'єкта.
Object.getOwnPropertySymbols()
(взяти символи власних властивостей)Повертає масив усіх символьних властивостей, знайдених безпосередньо у переданому об'єкті.
Object.getPrototypeOf()
(взяти прототип від)Повертає прототип (внутрішню властивість
[[Prototype]]
) вказаного об'єкта.Object.groupBy()
Групує елементи даного ітерованого об'єкта згідно з рядковими значеннями, поверненими переданою функцією зворотного виклику. Повернений об'єкт має окремі властивості для кожної групи, що містять масиви з елементами відповідних груп.
Object.hasOwn()
Повертає
true
, якщо заданий об'єкт має вказану властивість як свою власну властивість, абоfalse
, якщо властивість є успадкованою або не існує.Object.is()
(є)Порівнює два значення і визначає, чи вони є одним значенням. Прирівнює всі значення
NaN
між собою (що відрізняється і від алгоритмуIsLooselyEqual
, що використовується==
, і відIsStrictlyEqual
, що використовується===
).Object.isExtensible()
(є розширюваним)Визначає, чи можна розширювати переданий об'єкт.
Object.isFrozen()
(є замороженим)Визначає, чи переданий об'єкт є замороженим.
Object.isSealed()
(є запечатаним)Визначає, чи переданий об'єкт було запечатано.
Object.keys()
(ключі)Повертає масив, що містить імена всіх власних перелічуваних рядкових властивостей переданого об'єкта.
Object.preventExtensions()
(перешкодити розширенню)Перешкоджає розширенню об'єкта.
Object.seal()
(запечатати)Перешкоджає видаленню властивостей об'єкта іншим кодом.
Object.setPrototypeOf()
(встановити прототип для)Встановлює прототип об'єкта (його внутрішню властивість
[[Prototype]]
).Object.values()
(значення)Повертає масив, що містить значення, які відповідають всім власним перелічуваним рядковим властивостям переданого об'єкта.
Властивості примірника
Ці властивості означені на Object.prototype
і є спільними для всіх примірників Object
.
Object.prototype.__proto__
Вказує на об'єкт, який було використано як прототип під час створення примірника цього об'єкта.
Object.prototype.constructor
(конструктор)Функція-конструктор, що створила об'єкт-примірник. Для простих примірників
Object
початковим значенням є конструкторObject
. Кожний з примірників інших конструкторів успадковує властивістьconstructor
від відповідного об'єктаConstructor.prototype
.
Методи примірника
Object.prototype.__defineGetter__()
(означити гетер)Пов'язує функцію з властивістю так, що під час спроби доступитися до властивості вона викликає цю функцію та повертає її результат.
Object.prototype.__defineSetter__()
(означити сетер)Пов'язує функцію з властивістю так, що під час спроби встановлення її значення викликається ця функція, яка і змінює властивість.
Object.prototype.__lookupGetter__()
(шукати гетер)Повертає функцію, прив'язану до вказаної властивості як гетер.
Object.prototype.__lookupSetter__()
(шукати сетер)Повертає функцію, прив'язану до вказаної властивості як сетер.
Object.prototype.hasOwnProperty()
(має власну властивість)Повертає булеве значення, яке вказує на те, що об'єкт містить вказану властивість прямо в собі, а не успадковує її через прототипний ланцюжок.
Object.prototype.isPrototypeOf()
(є прототипом для)Повертає булеве значення, яке вказує на те, що об'єкт, на якому викликався цей метод, присутній у прототипному ланцюжку переданого об'єкта.
Object.prototype.propertyIsEnumerable()
(властивість є перелічуваною)Повертає булеве значення, яке вказує на те, чи є задана властивість перелічуваною власною властивістю об'єкта.
Object.prototype.toLocaleString()
(до локалізованого рядка)Викликає
toString()
.Object.prototype.toString()
(до рядка)Повертає значення об'єкта, подане у формі рядка.
Object.prototype.valueOf()
(значення від)Повертає примітивне значення вказаного об'єкта.
Приклади
Конструювання порожніх об'єктів
У наступному прикладі порожні об'єкти створюються за допомогою ключового слова new
та різних аргументів:
const o1 = new Object();
const o2 = new Object(undefined);
const o3 = new Object(null);
Застосування конструктора Object() для перетворення примітивів на Object відповідних типів
Конструктор Object()
можна використовувати для створення об'єктних обгорток примітивних значень.
Наступні приклади створюють змінні o1
і o2
, що є об'єктами, котрі вміщають значення Boolean
і BigInt
:
// Рівносильно інструкції const o1 = new Boolean(true)
const o1 = new Object(true);
// Немає відповідника, тому що BigInt() не можна викликати
// як конструктор, а виклик BigInt() як звичайної функції
// не створює об'єкт
const o2 = new Object(1n);
Прототипи об'єктів
Під час зміни поведінки вже наявних методів Object.prototype
слід зважити можливість внесення ізольованого коду перед або після чинної логіки. Наприклад, наведений нижче (нетестований) код за умовою виконає користувацьку логіку до того, як спрацює вбудована логіка (або виконається інше розширення).
В разі внесення змін у прототипи за допомогою таких причеп – слід передавати this
та аргументи (стан виклику) до чинної логіки шляхом виклику apply()
на функції. Цей патерн можна використовувати на будь-яких прототипах, як от Node.prototype
, Function.prototype
, та ін.
const current = Object.prototype.valueOf;
// Оскільки властивість "-prop-value" є наскрізною, і не завжди присутня
// в тому самому прототипному ланцюжку, виникає потреба змінити Object.prototype:
Object.prototype.valueOf = function (...args) {
if (Object.hasOwn(this, "-prop-value")) {
return this["-prop-value"];
} else {
// Це не схоже на наш об'єкт, тому повернімося до усталеної поведінки
// шляхом відтворення діючої поведінки, наскільки це можливо.
// Функція "apply" поводить себе подібно до "super" у деяких інших мовах.
// І хоча "valueOf()" не приймає аргументів, їх можуть приймати якісь інші причепи.
return current.apply(this, args);
}
};
Застереження: Змінювати властивість
prototype
будь-якого вбудованого конструктора вважається недоброю практикою і є ризиком щодо сумісності.
Більше про прототипи можна прочитати в Успадкуванні й ланцюжку прототипів.
Специфікації
Сумісність із браузерами
desktop | mobile | server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Object
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 3 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
Object() constructor
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 3 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
assign
|
Chrome Full support 45 | Edge Full support 12 | Firefox Full support 34 | Internet Explorer No support Ні | Opera Full support 32 | Safari Full support 9 | WebView Android Full support 45 | Chrome Android Full support 45 | Firefox for Android Full support 34 | Opera Android Full support 32 | Safari on iOS Full support 9 | Samsung Internet Full support 5.0 | Deno Full support 1.0 | Node.js Full support 4.0.0 |
constructor
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 8 | Opera Full support 4 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
create
|
Chrome Full support 5 | Edge Full support 12 | Firefox Full support 4 | Internet Explorer Full support 9 | Opera Full support 11.6 | Safari Full support 5 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 12 | Safari on iOS Full support 5 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
__defineGetter__
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 11 | Opera Full support 9.5 | Safari Full support 3 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
defineProperties
|
Chrome Full support 5 | Edge Full support 12 | Firefox Full support 4 | Internet Explorer Full support 9 | Opera Full support 11.6 | Safari Full support 5 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 12 | Safari on iOS Full support 5 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
defineProperty
|
Chrome Full support 5 | Edge Full support 12 | Firefox Full support 4 | Internet Explorer Full support 9 | Opera Full support 11.6 | Safari Full support 5.1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 12 | Safari on iOS Full support 6 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
__defineSetter__
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 11 | Opera Full support 9.5 | Safari Full support 3 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
entries
|
Chrome Full support 54 | Edge Full support 14 | Firefox Full support 47 | Internet Explorer No support Ні | Opera Full support 41 | Safari Full support 10.1 | WebView Android Full support 54 | Chrome Android Full support 54 | Firefox for Android Full support 47 | Opera Android Full support 41 | Safari on iOS Full support 10.3 | Samsung Internet Full support 6.0 | Deno Full support 1.0 | Node.js Full support 7.0.0 |
freeze
|
Chrome Full support 6 | Edge Full support 12 | Firefox Full support 4 | Internet Explorer Full support 9 | Opera Full support 12 | Safari Full support 5.1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 12 | Safari on iOS Full support 6 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
fromEntries
|
Chrome Full support 73 | Edge Full support 79 | Firefox Full support 63 | Internet Explorer No support Ні | Opera Full support 60 | Safari Full support 12.1 | WebView Android Full support 73 | Chrome Android Full support 73 | Firefox for Android Full support 63 | Opera Android No support Ні | Safari on iOS Full support 12.2 | Samsung Internet Full support 11.0 | Deno Full support 1.0 | Node.js Full support 12.0.0 |
getOwnPropertyDescriptor
|
Chrome Full support 5 | Edge Full support 12 | Firefox Full support 4 | Internet Explorer Full support 9 | Opera Full support 12 | Safari Full support 5 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 12 | Safari on iOS Full support 5 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
getOwnPropertyDescriptors
|
Chrome Full support 54 | Edge Full support 15 | Firefox Full support 50 | Internet Explorer No support Ні | Opera Full support 41 | Safari Full support 10 | WebView Android Full support 54 | Chrome Android Full support 54 | Firefox for Android Full support 50 | Opera Android Full support 41 | Safari on iOS Full support 10 | Samsung Internet Full support 6.0 | Deno Full support 1.0 | Node.js Full support 7.0.0 |
getOwnPropertyNames
|
Chrome Full support 5 | Edge Full support 12 | Firefox Full support 4 | Internet Explorer Full support 9 | Opera Full support 12 | Safari Full support 5 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 12 | Safari on iOS Full support 5 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
getOwnPropertySymbols
|
Chrome Full support 38 | Edge Full support 12 | Firefox Full support 36 | Internet Explorer No support Ні | Opera Full support 25 | Safari Full support 9 | WebView Android Full support 38 | Chrome Android Full support 38 | Firefox for Android Full support 36 | Opera Android Full support 25 | Safari on iOS Full support 9 | Samsung Internet Full support 3.0 | Deno Full support 1.0 | Node.js Full support 0.12.0 |
getPrototypeOf
|
Chrome Full support 5 | Edge Full support 12 | Firefox Full support 3.5 | Internet Explorer Full support 9 | Opera Full support 12.1 | Safari Full support 5 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 12.1 | Safari on iOS Full support 5 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
hasOwn
|
Chrome Full support 93 | Edge Full support 93 | Firefox Full support 92 | Internet Explorer No support Ні | Opera Full support 79 | Safari Full support 15.4 | WebView Android Full support 93 | Chrome Android Full support 93 | Firefox for Android Full support 92 | Opera Android No support Ні | Safari on iOS Full support 15.4 | Samsung Internet Full support 17.0 | Deno Full support 1.13 | Node.js Full support 16.9.0 |
hasOwnProperty
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 5.5 | Opera Full support 5 | Safari Full support 3 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
is
|
Chrome Full support 30 | Edge Full support 12 | Firefox Full support 22 | Internet Explorer No support Ні | Opera Full support 17 | Safari Full support 9 | WebView Android Full support 37 | Chrome Android Full support 30 | Firefox for Android Full support 22 | Opera Android Full support 18 | Safari on iOS Full support 9 | Samsung Internet Full support 2.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
isExtensible
|
Chrome Full support 6 | Edge Full support 12 | Firefox Full support 4 | Internet Explorer Full support 9 | Opera Full support 12 | Safari Full support 5.1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 12 | Safari on iOS Full support 6 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
isFrozen
|
Chrome Full support 6 | Edge Full support 12 | Firefox Full support 4 | Internet Explorer Full support 9 | Opera Full support 12 | Safari Full support 5.1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 12 | Safari on iOS Full support 6 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
isPrototypeOf
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 9 | Opera Full support 4 | Safari Full support 3 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
isSealed
|
Chrome Full support 6 | Edge Full support 12 | Firefox Full support 4 | Internet Explorer Full support 9 | Opera Full support 12 | Safari Full support 5.1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 12 | Safari on iOS Full support 6 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
keys
|
Chrome Full support 5 | Edge Full support 12 | Firefox Full support 4 | Internet Explorer Full support 9 | Opera Full support 12 | Safari Full support 5 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 12 | Safari on iOS Full support 5 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
__lookupGetter__
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 11 | Opera Full support 9.5 | Safari Full support 3 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
__lookupSetter__
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 11 | Opera Full support 9.5 | Safari Full support 3 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
preventExtensions
|
Chrome Full support 6 | Edge Full support 12 | Firefox Full support 4 | Internet Explorer Full support 9 | Opera Full support 12 | Safari Full support 5.1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 12 | Safari on iOS Full support 6 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
ES2015 behavior for non-object argument
|
Chrome Full support 44 | Edge Full support 12 | Firefox Full support 35 | Internet Explorer Full support 11 | Opera Full support 31 | Safari Full support 9 | WebView Android Full support 44 | Chrome Android Full support 44 | Firefox for Android Full support 35 | Opera Android Full support 32 | Safari on iOS Full support 9 | Samsung Internet Full support 4.0 | Deno Full support 1.0 | Node.js Full support 4.0.0 |
propertyIsEnumerable
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 5.5 | Opera Full support 4 | Safari Full support 3 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
__proto__
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 11 | Opera Full support 10.5 | Safari Full support 3 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 11 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno No support Ні | Node.js Full support 0.10.0 |
seal
|
Chrome Full support 6 | Edge Full support 12 | Firefox Full support 4 | Internet Explorer Full support 9 | Opera Full support 12 | Safari Full support 5.1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 12 | Safari on iOS Full support 6 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
setPrototypeOf
|
Chrome Full support 34 | Edge Full support 12 | Firefox Full support 31 | Internet Explorer Full support 11 | Opera Full support 21 | Safari Full support 9 | WebView Android Full support 37 | Chrome Android Full support 34 | Firefox for Android Full support 31 | Opera Android Full support 21 | Safari on iOS Full support 9 | Samsung Internet Full support 2.0 | Deno Full support 1.0 | Node.js Full support 0.12.0 |
toLocaleString
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 5.5 | Opera Full support 4 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
toSource
|
Chrome No support Ні | Edge No support Ні | Firefox No support 1 – 74 | Internet Explorer No support Ні | Opera No support Ні | Safari No support Ні | WebView Android No support Ні | Chrome Android No support Ні | Firefox for Android Full support 4 | Opera Android No support Ні | Safari on iOS No support Ні | Samsung Internet No support Ні | Deno No support Ні | Node.js No support Ні |
toString()
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 3 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
valueOf
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support 4 | Opera Full support 3 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |
values
|
Chrome Full support 54 | Edge Full support 14 | Firefox Full support 47 | Internet Explorer No support Ні | Opera Full support 41 | Safari Full support 10.1 | WebView Android Full support 54 | Chrome Android Full support 54 | Firefox for Android Full support 47 | Opera Android Full support 41 | Safari on iOS Full support 10.3 | Samsung Internet Full support 6.0 | Deno Full support 1.0 | Node.js Full support 7.0.0 |