Object
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since иÑÐ»Ñ 2015 г..
* Some parts of this feature may have varying levels of support.
Тип Object пÑедÑÑавлÑÐµÑ Ð¾Ð´Ð¸Ð½ из Ñипов даннÑÑ
JavaScript. Ðн иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÑазлиÑнÑÑ
коллекÑий Ñ ÐºÐ»ÑÑами и более ÑложнÑÑ
ÑÑÑноÑÑей. ÐбÑекÑÑ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ ÑÐ¾Ð·Ð´Ð°Ð½Ñ Ñ Ð¸ÑполÑзованием конÑÑÑÑкÑоÑа Object() или ÑинÑакÑиÑа иниÑиализаÑоÑа / лиÑеÑала обÑекÑа.
ÐпиÑание
ÐоÑÑи вÑе обÑекÑÑ Ð² JavaScript ÑвлÑÑÑÑÑ ÑкземплÑÑами Object; ÑипиÑнÑй обÑÐµÐºÑ Ð½Ð°ÑледÑÐµÑ ÑвойÑÑва (вклÑÑÐ°Ñ Ð¼ÐµÑодÑ) Ð¾Ñ Object.prototype, Ñ
оÑÑ ÑÑи ÑвойÑÑва могÑÑ Ð±ÑÑÑ Ð·Ð°ÑÐµÐ½ÐµÐ½Ñ (Ñ.е. пеÑеопÑеделенÑ). ÐдинÑÑвеннÑе обÑекÑÑ, коÑоÑÑе не наÑледÑÑÑ Ð¾Ñ Object.prototype, - ÑÑо Ñе, Ñ ÐºÐ¾ÑоÑÑÑ
пÑоÑоÑип null, или коÑоÑÑе пÑоиÑÑ
одÑÑ Ð¾Ñ Ð´ÑÑгиÑ
обÑекÑов Ñ Ð¿ÑоÑоÑипом null.
ÐÐ·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² обÑекÑе Object.prototype Ð²Ð¸Ð´Ð½Ñ Ð²Ñем обÑекÑам Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑепоÑки пÑоÑоÑипов, еÑли ÑвойÑÑва и меÑодÑ, подвеÑженнÑе ÑÑим изменениÑм, не пеÑеопÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð´Ð°Ð»ÑÑе по ÑепоÑке пÑоÑоÑипов. ÐÑо пÑедоÑÑавлÑÐµÑ Ð¾ÑÐµÐ½Ñ Ð¼Ð¾ÑнÑй, Ñ
оÑÑ Ð¸ поÑенÑиалÑно опаÑнÑй меÑ
анизм Ð´Ð»Ñ Ð¿ÐµÑеопÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ð±ÑекÑов. ÐÐ»Ñ Ð¾Ð±ÐµÑпеÑÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÑÑей безопаÑноÑÑи, Object.prototype - единÑÑвеннÑй обÑÐµÐºÑ Ð² оÑновном ÑзÑке JavaScript, Ñ ÐºÐ¾ÑоÑого неизменÑемÑй пÑоÑоÑип - пÑоÑоÑип Object.prototype вÑегда null и не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½.
СвойÑÑва пÑоÑоÑипа Object
СледÑÐµÑ Ð¸Ð·Ð±ÐµÐ³Ð°ÑÑ Ð¿ÑÑмого вÑзова меÑодов 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() Ð´Ð»Ñ Ñелевого обÑекÑа, ÑÑÐ¾Ð±Ñ Ð¿ÑедоÑвÑаÑиÑÑ Ð¿Ð¾Ñвление Ñ Ð¾Ð±ÑекÑа пеÑеопÑеделÑнного ÑвойÑÑва, коÑоÑое Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к неожиданнÑм ÑезÑлÑÑаÑам.
const obj = {
foo: 1,
// Ðе ÑледÑÐµÑ Ð¾Ð¿ÑеделÑÑÑ Ñакой меÑод в ÑобÑÑвенном обÑекÑе,
// но Ð¼Ð¾Ð¶ÐµÑ Ð½Ðµ бÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи пÑедоÑвÑаÑиÑÑ ÑÑо, еÑли
// обÑÐµÐºÑ Ð¿Ð¾Ð»ÑÑен из внеÑнего иÑÑоÑника даннÑÑ
propertyIsEnumerable() {
return false;
},
};
obj.propertyIsEnumerable("foo"); // false; неожиданнÑй ÑезÑлÑÑаÑ
Object.prototype.propertyIsEnumerable.call(obj, "foo"); // true; ожидаемÑй ÑезÑлÑÑаÑ
СинÑакÑиÑ
// ÐниÑиализаÑÐ¾Ñ Ð¾Ð±ÑекÑа или лиÑеÑал
{ [ nameValuePair1[, nameValuePair2[, ...nameValuePairN] ] ] }
// ÐÑзов в каÑеÑÑве конÑÑÑÑкÑоÑа
new Object([value])
ÐаÑамеÑÑÑ
nameValuePair1, nameValuePair2, ... nameValuePairN-
ÐаÑÑ Ð¸Ð· имÑн (ÑÑÑоки) и знаÑений (лÑбÑе знаÑениÑ), где Ð¸Ð¼Ñ Ð¾ÑделÑеÑÑÑ Ð¾Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð´Ð²Ð¾ÐµÑоÑием.
value-
ÐÑбое знаÑение.
СвойÑÑва конÑÑÑÑкÑоÑа Object
Object.length-
ÐÐ¼ÐµÐµÑ Ð·Ð½Ð°Ñение 1.
Object.prototype-
ÐозволÑÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑ ÑвойÑÑва ко вÑем обÑекÑам Ñипа
Object.
ÐеÑÐ¾Ð´Ñ ÐºÐ¾Ð½ÑÑÑÑкÑоÑа Object
Object.assign()-
СоздаÑÑ Ð½Ð¾Ð²Ñй обÑÐµÐºÑ Ð¿ÑÑÑм копиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð½Ð°Ñений вÑÐµÑ ÑобÑÑвеннÑÑ Ð¿ÐµÑеÑиÑлимÑÑ ÑвойÑÑв из одного или более иÑÑ Ð¾Ð´Ð½ÑÑ Ð¾Ð±ÑекÑов в Ñелевой обÑекÑ.
Object.create()-
СоздаÑÑ Ð½Ð¾Ð²Ñй обÑÐµÐºÑ Ñ ÑказаннÑми обÑекÑом пÑоÑоÑипа и ÑвойÑÑвами.
Object.defineProperty()-
ÐобавлÑÐµÑ Ðº обÑекÑÑ Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð½Ð¾Ðµ ÑвойÑÑво, опиÑÑваемое пеÑеданнÑм деÑкÑипÑоÑом.
Object.defineProperties()-
ÐобавлÑÐµÑ Ðº обÑекÑÑ Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð½Ñе ÑвойÑÑва, опиÑÑваемÑе пеÑеданнÑми деÑкÑипÑоÑами.
Object.freeze()-
ÐамоÑÐ°Ð¶Ð¸Ð²Ð°ÐµÑ Ð¾Ð±ÑекÑ: дÑÑгой код не ÑÐ¼Ð¾Ð¶ÐµÑ ÑдалиÑÑ Ð¸Ð»Ð¸ измениÑÑ Ð½Ð¸ÐºÐ°ÐºÐ¾Ðµ ÑвойÑÑво.
Object.getOwnPropertyDescriptor()-
ÐозвÑаÑÐ°ÐµÑ Ð´ÐµÑкÑипÑÐ¾Ñ ÑвойÑÑва Ð´Ð»Ñ Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð½Ð¾Ð³Ð¾ ÑвойÑÑва обÑекÑа.
Object.getOwnPropertyNames()-
ÐозвÑаÑÐ°ÐµÑ Ð¼Ð°ÑÑив, ÑодеÑжаÑий имена вÑÐµÑ Ð¿ÐµÑеданнÑÑ Ð¾Ð±ÑекÑÑ ÑобÑÑвеннÑÑ Ð¿ÐµÑеÑиÑлÑемÑÑ Ð¸ непеÑеÑиÑлÑемÑÑ ÑвойÑÑв.
Object.getOwnPropertySymbols()-
ÐозвÑаÑÐ°ÐµÑ Ð¼Ð°ÑÑив вÑÐµÑ ÑимволÑнÑÑ ÑвойÑÑв, найденнÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно в пеÑеданном обÑекÑе.
Object.getPrototypeOf()-
ÐозвÑаÑÐ°ÐµÑ Ð¿ÑоÑоÑип Ñказанного обÑекÑа.
Object.is()-
ÐпÑеделÑеÑ, ÑвлÑÑÑÑÑ Ð»Ð¸ два знаÑÐµÐ½Ð¸Ñ ÑазлиÑимÑми (Ñо еÑÑÑ, одинаковÑми)
Object.isExtensible()-
ÐпÑеделÑеÑ, ÑазÑеÑено ли ÑаÑÑиÑение обÑекÑа.
Object.isFrozen()-
ÐпÑеделÑеÑ, бÑл ли обÑÐµÐºÑ Ð·Ð°Ð¼Ð¾Ñожен.
Object.isSealed()-
ÐпÑеделÑеÑ, ÑвлÑеÑÑÑ Ð»Ð¸ обÑÐµÐºÑ Ð·Ð°Ð¿ÐµÑаÑаннÑм (sealed).
Object.keys()-
ÐозвÑаÑÐ°ÐµÑ Ð¼Ð°ÑÑив, ÑодеÑжаÑий имена вÑÐµÑ ÑобÑÑвеннÑÑ Ð¿ÐµÑеÑиÑлимÑÑ ÑвойÑÑв пеÑеданного обÑекÑа.
Object.observe()-
ÐÑÐ¸Ð½Ñ Ñонно наблÑÐ´Ð°ÐµÑ Ð·Ð° изменениÑми в обÑекÑе.
Object.preventExtensions()-
ÐÑедоÑвÑаÑÐ°ÐµÑ Ð»Ñбое ÑаÑÑиÑение обÑекÑа.
Object.seal()-
ÐÑедоÑвÑаÑÐ°ÐµÑ Ñдаление ÑвойÑÑв обÑекÑа дÑÑгим кодом.
Object.setPrototypeOf()-
УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð¿ÑоÑоÑип (Ñ.е. внÑÑÑеннее ÑвойÑÑво
[[Prototype]])
ÐкземплÑÑÑ Ð¸ пÑоÑоÑип обÑекÑа Object
ÐÑе обÑекÑÑ Ð² JavaScript ÑвлÑÑÑÑÑ Ð¿Ð¾Ñомками Object; вÑе обÑекÑÑ Ð½Ð°ÑледÑÑÑ Ð¼ÐµÑÐ¾Ð´Ñ Ð¸ ÑвойÑÑва из пÑоÑоÑипа обÑекÑа Object.prototype, Ñ
оÑÑ Ð¾Ð½Ð¸ и могÑÑ Ð±ÑÑÑ Ð¿ÐµÑеопÑеделенÑ. ÐапÑимеÑ, пÑоÑоÑÐ¸Ð¿Ñ Ð´ÑÑгиÑ
конÑÑÑÑкÑоÑов пеÑеопÑеделÑÑÑ ÑвойÑÑво constructor и пÑедоÑÑавлÑÑÑ Ñвои ÑобÑÑвеннÑе меÑÐ¾Ð´Ñ toString(). ÐÐ·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² обÑекÑе пÑоÑоÑипа Object ÑаÑпÑоÑÑÑанÑÑÑÑÑ Ð½Ð° вÑе обÑекÑÑ Ð´Ð¾ ÑеÑ
поÑ, пока ÑвойÑÑва и меÑодÑ, ÑÑиÑÑваÑÑие ÑÑи изменениÑ, не пеÑеопÑеделÑÑÑÑÑ Ð´Ð°Ð»ÑÑе по ÑепоÑке пÑоÑоÑипов.
СвойÑÑва
Object()-
ÐÑевÑаÑÐ°ÐµÑ Ð²Ñ Ð¾Ð´Ð½Ñе даннÑе в обÑекÑ.
Object.prototype.constructor-
УказÑÐ²Ð°ÐµÑ ÑÑнкÑиÑ, коÑоÑÐ°Ñ ÑÐ¾Ð·Ð´Ð°ÐµÑ Ð¿ÑоÑоÑип обÑекÑа.
Object.prototype.__proto__-
УказÑÐ²Ð°ÐµÑ Ð½Ð° обÑекÑ, коÑоÑÑй иÑполÑзовалÑÑ Ð² каÑеÑÑве пÑоÑоÑипа пÑи Ñоздании ÑкземплÑÑа обÑекÑа.
ÐеÑодÑ
Object.prototype.__defineGetter__()-
СвÑзÑÐ²Ð°ÐµÑ ÑÑнкÑÐ¸Ñ Ñо ÑвойÑÑвом, коÑоÑое пÑи обÑаÑении к Ð½ÐµÐ¼Ñ Ð²ÑполнÑÐµÑ ÑÑÑ ÑÑнкÑÐ¸Ñ Ð¸ возвÑаÑÐ°ÐµÑ ÐµÐµ возвÑаÑаемое знаÑение.
Object.prototype.__defineSetter__()-
СвÑзÑÐ²Ð°ÐµÑ ÑÑнкÑÐ¸Ñ Ñо ÑвойÑÑвом, коÑоÑое пÑи ÑÑÑановке вÑполнÑÐµÑ ÑÑ ÑÑнкÑиÑ, коÑоÑÐ°Ñ Ð¸Ð·Ð¼ÐµÐ½ÑÐµÑ ÑвойÑÑво.
Object.prototype.__lookupGetter__()-
ÐозвÑаÑÐ°ÐµÑ ÑÑнкÑиÑ, пÑивÑзаннÑÑ Ð² каÑеÑÑве ÑÑедÑÑва полÑÑÐµÐ½Ð¸Ñ Ðº ÑÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼Ñ ÑвойÑÑвÑ.
Object.prototype.__lookupSetter__()-
ÐозвÑаÑÐ°ÐµÑ ÑÑнкÑиÑ, пÑивÑзаннÑÑ Ð² каÑеÑÑве ÑÑÑановÑика к ÑÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼Ñ ÑвойÑÑвÑ.
Object.prototype.hasOwnProperty()-
ÐозвÑаÑÐ°ÐµÑ Ð»Ð¾Ð³Ð¸ÑеÑкое знаÑение, ÑказÑваÑÑее, ÑодеÑÐ¶Ð¸Ñ Ð»Ð¸ обÑÐµÐºÑ Ñказанное ÑвойÑÑво как пÑÑмое ÑвойÑÑво ÑÑого обÑекÑа, а не ÑнаÑледованное ÑеÑез ÑепоÑÐºÑ Ð¿ÑоÑоÑипов.
Object.prototype.isPrototypeOf()-
ÐозвÑаÑÐ°ÐµÑ Ð»Ð¾Ð³Ð¸ÑеÑкое знаÑение, ÑказÑваÑÑее, Ð²Ñ Ð¾Ð´Ð¸Ñ Ð»Ð¸ обÑекÑ, Ñ ÐºÐ¾ÑоÑого вÑзван меÑод, в ÑепоÑÐºÑ Ð¿ÑоÑоÑипов дÑÑгого обÑекÑа.
Object.prototype.propertyIsEnumerable()-
ÐозвÑаÑÐ°ÐµÑ Ð»Ð¾Ð³Ð¸ÑеÑкое знаÑение, ÑказÑваÑÑее, ÑвлÑеÑÑÑ Ð»Ð¸ Ñказанное ÑвойÑÑво ÑвойÑÑвом обÑекÑа enumerable own.
Object.prototype.toLocaleString()-
ÐÑзÑваеÑ
toString(). Object.prototype.toString()-
ÐозвÑаÑÐ°ÐµÑ ÑÑÑоковое пÑедÑÑавление обÑекÑа.
Object.prototype.valueOf()-
ÐозвÑаÑÐ°ÐµÑ Ð¿ÑимиÑивное знаÑение Ñказанного обÑекÑа.
ÐÑимеÑÑ
>ÐÑимеÑ: иÑполÑзование Object Ñ Ñипами undefined и null
СледÑÑÑие пÑимеÑÑ ÑоÑ
ÑанÑÑÑ Ð¿ÑÑÑой обÑÐµÐºÑ Object в пеÑеменнÑÑ o:
const o = new Object();
const o = new Object(undefined);
const o = new Object(null);
ÐÑимеÑ: иÑполÑзование Object Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±ÑекÑов Boolean
СледÑÑÑий пÑÐ¸Ð¼ÐµÑ ÑоÑ
ÑанÑÐµÑ Ð¾Ð±ÑекÑÑ Boolean в пеÑеменнÑÑ o:
// ÑквиваленÑно o = new Boolean(true);
const o = new Object(true);
// ÑквиваленÑно o = new Boolean(false);
const o = new Object(Boolean());
СпеÑиÑикаÑии
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-object-objects> |