Object

Клас Object відображає один з типів даних JavaScript. Він використовується для збереження різноманітних колекцій, що використовують ключі, та більш складних сутностей. Об'єкти можуть бути створені за допомогою конструктора Object() або об'єктного ініціалізатора / літерального синтаксису.

Опис

Майже усі об'єкти у JavaScript є екземплярами Object; типовий об'єкт успадковує властивості (в тому числі методи) від Object.prototype, хоча ці властивості можуть бути перекриті (перевизначені). Однак, можна навмисно створити Object, для якого це буде не так (наприклад, за допомогою Object.create(null)), або змінити його таким чином (наприклад, через Object.setPrototypeOf).

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

Конструктор Object створює обгортку об'єкта для заданого значення.

  • Якщо значенням є null або undefined, конструктор створить та поверне порожній об'єкт.
  • В іншому випадку, він поверне об'єкт того типу, який відповідає наданому значенню.
  • Якщо значення вже є об'єктом, конструктор поверне це значення.

Під час виклику не у контексті конструктора, Object поводиться ідентично до new Object().

Дивіться також Ініціалізатор об'єктів / літеральний синтаксис.

Видалення властивості об'єкта

У самому об'єкті не існує методів для видалення своїх властивостей (таких, як Map.prototype.delete()). Щоб зробити це, необхідно скористатись оператором delete.

Конструктор

Object()
Створює новий об'єкт Object. Це обгортка для наданого значення.

Статичні методи

Object.assign()
Копіює значення усіх перелічуваних особистих властивостей з одного або більше об'єктів у цільовий об'єкт.
Object.create()
Створює новий об'єкт із вказаним прототипним об'єктом і властивостями.
Object.defineProperty()
Додає зазначену властивість, описану наданим дескриптором, до об'єкта.
Object.defineProperties()
Додає зазначені властивості, описані наданими дескрипторами, до об'єкта.
Object.entries()
Повертає масив, що містить усі пари [key, value] особистих перелічуваних рядкових властивостей данного  об'єкта.
Object.freeze()
Заморожує об'єкт: інший код не може видаляти або змінювати будь-які властивості.
Object.fromEntries()
Повертає новий об'єкт з ітерабельного об'єкта, що містить пари ключ-значення (зворотний до Object.entries).
Object.getOwnPropertyDescriptor()
Повертає дескриптор властивості для зазначенної властивості об'єкта.
Object.getOwnPropertyDescriptors()
Повертає об'єкт, що містить дескриптори всіх особистих властивостей об'єкта.
Object.getOwnPropertyNames()
Повертає масив, що містить імена всіх особистих перелічуваних і неперелічуванних властивостей даного об'єкта.
Object.getOwnPropertySymbols()
Повертає масив усіх символьних властивостей, знайдених безпосередньо на даному об'єкті.
Object.getPrototypeOf()
Повертає прототип вказаного об'єкта.
Object.is()
Перевіряє, чи мають два аргументи однакове значення. Прирівнює усі значення NaN (що відрізняється як від абстрактної рівності, так і від строгої рівності).
Object.isExtensible()
Визначає, чи дозволене розширення об'єкта.
Object.isFrozen()
Визначає, чи є об'єкт замороженим.
Object.isSealed()
Визначає, чи є об'єкт запечатанним.
Object.keys()
Повертає масив, що містить імена всіх особистих перелічуваних рядкових властивостей даного об'єкта.
Object.preventExtensions()
Запобігає будь-яким розширенням об'єкта.
Object.seal()
Запобігає можливості іншого коду видаляти властивості об'єкта.
Object.setPrototypeOf()
Встановлює прототип (тобто, внутрішню властивість [[Prototype]] об'єкта).
Object.values()
Повертає масив, який містить значення, що відповідають усім особистим перелічуваним рядковим властивостям даного об'єкта.

Властивості екземплярів 

Object.prototype.constructor
Визначає функцію, що створює прототип об'єкта.
Object.prototype.__proto__
Вказує на об'єкт, що був використаний як прототип, коли створювався екземпляр об'єкта.
Object.prototype.__noSuchMethod__
Дозволяє визначити функцію, яка буде виконуватись, коли на об'єкті викликатиметься неіснуючий елемент.

Методи екземплярів

Object.prototype.__defineGetter__()
Прив'язує функцію до властивості, яка, під час звернення до неї, викликатиме цю функцію та повертатиме значення, яке повернула функція.
Object.prototype.__defineSetter__()
Прив'язує функцію до властивості, яка, під час присвоєння, виконує цю функцію, яка змінює властивість.
Object.prototype.__lookupGetter__()
Повертає функцію, прив'язану до вказаної властивості методом __defineGetter__().
Object.prototype.__lookupSetter__()
Повертає функцію, прив'язану до вказаної властивості методом __defineSetter__().
Object.prototype.hasOwnProperty()
Повертає булеве значення, що вказує, чи об'єкт містить вказану властивість як особисту властивість цього об'єкта, а не успадковану через ланцюжок прототипів.
Object.prototype.isPrototypeOf()
Повертає булеве значення, що вказує, чи присутній об'єкт, на якому викликається цей метод, у ланцюжку прототипів вказаного об'єкта.
Object.prototype.propertyIsEnumerable()
Повертає булеве значення, що вказує, чи встановлений внутрішній атрибут ECMAScript [[Enumerable]].
Object.prototype.toLocaleString()
Викликає toString().
Object.prototype.toString()
Повертає рядок, що відображає об'єкт.
Object.prototype.unwatch()
Прибирає точку спостереження з властивості об'єкта.
Object.prototype.valueOf()
Повертає просту величину вказаного об'єкта.
Object.prototype.watch()
Додає точку спостереження до властивості об'єкта.

Приклади

Використання Object з типами undefined та null

Наступні приклади зберігають порожній об'єкт Object в o:

var o = new Object();
var o = new Object(undefined);
var o = new Object(null);

Використання Object для створення об'єктів Boolean

Наступні приклади зберігають об'єкти Boolean у o:

// еквівалентно до o = new Boolean(true);
var o = new Object(true);
// еквівалентно до o = new Boolean(false);
var o = new Object(Boolean());

Прототипи об'єктів

Змінюючи поведінку існуючих методів Object.prototype, розгляньте включення коду додаванням вашого розширення до чи після існуючої логіки. Наприклад, цей (неперевірений) код буде попередньо виконувати власну логіку перед тим, як буде виконано вбудовану логіку або інше розширення.

Коли викликається функція, аргументи виклику містяться у подібній до масиву "змінній" arguments. Наприклад, у виклику myFn(a, b, c), arguments, що знаходиться у тілі myFn, міститиме 3 подібні до масиву елементи, що відповідають (a, b, c).

Модифікуючи прототипи з хуками, просто передайте this та arguments (стан виклику) до поточної поведінки, викликавши apply() на функції. Цей шаблон може використовуватись для будь-яких прототипів, наприклад, Node.prototype, Function.prototype, і т. д.

var current = Object.prototype.valueOf;

// Оскільки моя властивість "-prop-value" є наскрізною та не завжди
// знаходиться в тому самому ланцюжку прототипів, я хочу змінити Object.prototype:
Object.prototype.valueOf = function() {
  if (this.hasOwnProperty('-prop-value')) {
    return this['-prop-value'];
  } else {
    // Це не схоже на один з моїх об'єктів, тому повернемось
    // до початкової поведінки, відтворивши поточну поведінку якнайкраще.
    // Метод apply поводиться як "super" у деяких інших мовах.
    // І хоча valueOf() не приймає аргументів, можливо, інший хук їх прийматиме.
    return current.apply(this, arguments);
  }
}

Оскільки JavaScript, насправді, не має об'єктів підкласу, прототип є зручним обхідним рішенням для створення об'єкта у ролі "базового класу" з певними функціями, що діють як об'єкти. Наприклад:

var Person = function(name) {
  this.name = name;
  this.canTalk = true;
};

Person.prototype.greet = function() {
  if (this.canTalk) {
    console.log('Привіт, я ' + this.name);
  }
};

var Employee = function(name, title) {
  Person.call(this, name);
  this.title = title;
};

Employee.prototype = Object.create(Person.prototype);

Employee.prototype.greet = function() {
  if (this.canTalk) {
    console.log('Привіт, я ' + this.name + ', ' + this.title);
  }
};

var Customer = function(name) {
  Person.call(this, name);
};

Customer.prototype = Object.create(Person.prototype);

var Mime = function(name) {
  Person.call(this, name);
  this.canTalk = false;
};

Mime.prototype = Object.create(Person.prototype);

var bob = new Employee('Боб', 'будівельник');
var joe = new Customer('Джо');
var rg = new Employee('Ред Грін', 'майстер на всі руки');
var mike = new Customer('Майк');
var mime = new Mime('Мім');

bob.greet();
// Привіт, я Боб, будівельник

joe.greet();
// Привіт, я Джо

rg.greet();
// Привіт, я Ред Грін, майстер на всі руки

mike.greet();
// Привіт, я Майк

mime.greet();

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

Специфікація
ECMAScript (ECMA-262)
The definition of 'Object' in that specification.

Сумісність з веб-переглядачами

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
ObjectChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support 3Safari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes
Object() constructorChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support 3Safari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes
assignChrome Full support 45Edge Full support 12Firefox Full support 34IE No support NoOpera Full support 32Safari Full support 9WebView Android Full support 45Chrome Android Full support 45Firefox Android Full support 34Opera Android Full support 32Safari iOS Full support 9Samsung Internet Android Full support 5.0nodejs Full support 4.0.0
constructorChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 4Opera Full support 4Safari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes
createChrome Full support 5Edge Full support 12Firefox Full support 4IE Full support 9Opera Full support 11.6Safari Full support 5WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 12Safari iOS Full support 5Samsung Internet Android Full support 1.0nodejs Full support Yes
__defineGetter__
Deprecated
Chrome Full support 1Edge Full support 12Firefox Full support 1
Notes
Full support 1
Notes
Notes Starting with Firefox 48, this method can no longer be called at the global scope without any object. A TypeError will be thrown otherwise. Previously, the global object was used in these cases automatically, but this is no longer the case.
IE Full support 11Opera Full support 9.5Safari Full support 3WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes
definePropertiesChrome Full support 5Edge Full support 12Firefox Full support 4IE Full support 9Opera Full support 11.6Safari Full support 5WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 12Safari iOS Full support 5Samsung Internet Android Full support 1.0nodejs Full support Yes
definePropertyChrome Full support 5Edge Full support 12Firefox Full support 4IE Full support 9
Full support 9
Partial support 8
Notes
Notes In Internet Explorer 8, this was only supported on DOM objects and with some non-standard behaviors. This was later fixed in Internet Explorer 9.
Opera Full support 11.6Safari Full support 5.1
Notes
Full support 5.1
Notes
Notes Also supported in Safari 5, but not on DOM objects.
WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 12Safari iOS Full support 6
Notes
Full support 6
Notes
Notes Also supported in Safari for iOS 4.2, but not on DOM objects.
Samsung Internet Android Full support 1.0nodejs Full support Yes
__defineSetter__
Deprecated
Chrome Full support 1Edge Full support 12Firefox Full support 1
Notes
Full support 1
Notes
Notes Starting with Firefox 48, this method can no longer be called at the global scope without any object. A TypeError will be thrown otherwise. Previously, the global object was used in these cases automatically, but this is no longer the case.
IE Full support 11Opera Full support 9.5Safari Full support 3WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes
entriesChrome Full support 54Edge Full support 14Firefox Full support 47IE No support NoOpera Full support 41Safari Full support 10.1WebView Android Full support 54Chrome Android Full support 54Firefox Android Full support 47Opera Android Full support 41Safari iOS Full support 10.3Samsung Internet Android Full support 6.0nodejs Full support 7.0.0
Full support 7.0.0
Full support 6.5.0
Disabled
Disabled From version 6.5.0: this feature is behind the --harmony runtime flag.
freezeChrome Full support 6Edge Full support 12Firefox Full support 4IE Full support 9Opera Full support 12Safari Full support 5.1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 12Safari iOS Full support 6Samsung Internet Android Full support 1.0nodejs Full support Yes
fromEntriesChrome Full support 73Edge Full support 79Firefox Full support 63IE No support NoOpera Full support 60Safari Full support 12.1WebView Android Full support 73Chrome Android Full support 73Firefox Android Full support 63Opera Android No support NoSafari iOS Full support 12.2Samsung Internet Android No support Nonodejs Full support 12.0.0
getOwnPropertyDescriptorChrome Full support 5Edge Full support 12Firefox Full support 4IE Full support 9
Full support 9
Partial support 8
Notes
Notes In Internet Explorer 8, this was only supported on DOM objects and with some non-standard behaviors. This was later fixed in Internet Explorer 9.
Opera Full support 12Safari Full support 5WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 12Safari iOS Full support 5Samsung Internet Android Full support 1.0nodejs Full support Yes
getOwnPropertyDescriptorsChrome Full support 54Edge Full support 15Firefox Full support 50IE No support NoOpera Full support 41Safari Full support 10WebView Android Full support 54Chrome Android Full support 54Firefox Android Full support 50Opera Android Full support 41Safari iOS Full support 10Samsung Internet Android Full support 6.0nodejs Full support 7.0.0
Full support 7.0.0
Full support 6.5.0
Disabled
Disabled From version 6.5.0: this feature is behind the --harmony runtime flag.
getOwnPropertyNamesChrome Full support 5Edge Full support 12Firefox Full support 4IE Full support 9Opera Full support 12Safari Full support 5WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 12Safari iOS Full support 5Samsung Internet Android Full support 1.0nodejs Full support Yes
getOwnPropertySymbolsChrome Full support 38Edge Full support 12Firefox Full support 36IE No support NoOpera Full support 25Safari Full support 9WebView Android Full support 38Chrome Android Full support 38Firefox Android Full support 36Opera Android Full support 25Safari iOS Full support 9Samsung Internet Android Full support 3.0nodejs Full support 0.12
getPrototypeOfChrome Full support 5Edge Full support 12Firefox Full support 3.5IE Full support 9Opera Full support 12.1Safari Full support 5WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 12.1Safari iOS Full support 5Samsung Internet Android Full support 1.0nodejs Full support Yes
hasOwnPropertyChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 5.5Opera Full support 5Safari Full support 3WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes
isChrome Full support 30Edge Full support 12Firefox Full support 22IE No support NoOpera Full support 17Safari Full support 9WebView Android Full support ≤37Chrome Android Full support 30Firefox Android Full support 22Opera Android Full support 18Safari iOS Full support 9Samsung Internet Android Full support 2.0nodejs Full support 0.10
isExtensibleChrome Full support 6Edge Full support 12Firefox Full support 4IE Full support 9Opera Full support 12Safari Full support 5.1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 12Safari iOS Full support 6Samsung Internet Android Full support 1.0nodejs Full support Yes
isFrozenChrome Full support 6Edge Full support 12Firefox Full support 4IE Full support 9Opera Full support 12Safari Full support 5.1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 12Safari iOS Full support 6Samsung Internet Android Full support 1.0nodejs Full support Yes
isPrototypeOfChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 9Opera Full support 4Safari Full support 3WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes
isSealedChrome Full support 6Edge Full support 12Firefox Full support 4IE Full support 9Opera Full support 12Safari Full support 5.1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 12Safari iOS Full support 6Samsung Internet Android Full support 1.0nodejs Full support Yes
keysChrome Full support 5Edge Full support 12Firefox Full support 4IE Full support 9Opera Full support 12Safari Full support 5WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 12Safari iOS Full support 5Samsung Internet Android Full support 1.0nodejs Full support Yes
__lookupGetter__
Deprecated
Chrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 11Opera Full support 9.5Safari Full support 3WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes
__lookupSetter__
Deprecated
Chrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 11Opera Full support 9.5Safari Full support 3WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes
preventExtensionsChrome Full support 6Edge Full support 12Firefox Full support 4IE Full support 9Opera Full support 12Safari Full support 5.1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 12Safari iOS Full support 6Samsung Internet Android Full support 1.0nodejs Full support Yes
propertyIsEnumerableChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 5.5Opera Full support 4Safari Full support 3WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes
__proto__
Deprecated
Chrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 11Opera Full support 10.5Safari Full support 3WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 11Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes
sealChrome Full support 6Edge Full support 12Firefox Full support 4IE Full support 9Opera Full support 12Safari Full support 5.1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 12Safari iOS Full support 6Samsung Internet Android Full support 1.0nodejs Full support Yes
setPrototypeOfChrome Full support 34Edge Full support 12Firefox Full support 31IE Full support 11Opera Full support 21Safari Full support 9WebView Android Full support 37Chrome Android Full support 34Firefox Android Full support 31Opera Android Full support 21Safari iOS Full support 9Samsung Internet Android Full support 2.0nodejs Full support 0.12
toLocaleStringChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 5.5Opera Full support 4Safari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes
toSource
DeprecatedNon-standard
Chrome No support NoEdge No support NoFirefox No support 1 — 74
Notes
No support 1 — 74
Notes
Notes Starting in Firefox 74, toSource() is no longer available for use by web content. It is still allowed for internal and privileged code.
IE No support NoOpera No support NoSafari No support NoWebView Android No support NoChrome Android No support NoFirefox Android Full support 4Opera Android No support NoSafari iOS No support NoSamsung Internet Android No support Nonodejs No support No
toString()Chrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support 3Safari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes
valueOfChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 4Opera Full support 3Safari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support Yes
valuesChrome Full support 54Edge Full support 14Firefox Full support 47IE No support NoOpera Full support 41Safari Full support 10.1WebView Android Full support 54Chrome Android Full support 54Firefox Android Full support 47Opera Android Full support 41Safari iOS Full support 10.3Samsung Internet Android Full support 6.0nodejs Full support 7.0.0
Full support 7.0.0
Full support 6.5.0
Disabled
Disabled From version 6.5.0: this feature is behind the --harmony runtime flag.

Legend

Full support  
Full support
No support  
No support
Non-standard. Expect poor cross-browser support.
Non-standard. Expect poor cross-browser support.
Deprecated. Not for use in new websites.
Deprecated. Not for use in new websites.
See implementation notes.
See implementation notes.
User must explicitly enable this feature.
User must explicitly enable this feature.

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