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 для роботи з об'єктами є статичними. Конкретніше:

У випадку, коли семантично рівносильний статичний метод не існує, або коли є охота використати саме метод 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-прототипні об'єкти, особливо ті, що використовують об'єкти як імпровізовані колекції ключ-значення. Наприклад:

Термін "null-прототипний об'єкт" також включає будь-які об'єкти, що не містять у своєму ланцюжку прототипів Object.prototype. При використанні класів такі об'єкти можуть бути створені за допомогою extends null.

Зведення до об'єкта

Чимало вбудованих операцій, котрі очікують отримати об'єкти, спершу зводять свої аргументи до об'єктів. Ця операція може бути підсумована так:

Найкращий спосіб досягнути в 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
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet Deno Node.js
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
footnote
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
footnote
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
footnote
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
footnote
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
footnote
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

Дивіться також