Object.prototype.hasOwnProperty()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since иÑÐ»Ñ 2015 г..
Сводка
ÐеÑод hasOwnProperty() возвÑаÑÐ°ÐµÑ Ð»Ð¾Ð³Ð¸ÑеÑкое знаÑение, ÑказÑваÑÑее, ÑодеÑÐ¶Ð¸Ñ Ð»Ð¸ обÑÐµÐºÑ Ñказанное ÑвойÑÑво.
СинÑакÑиÑ
obj.hasOwnProperty(prop)
ÐаÑамеÑÑÑ
prop-
ÐÐ¼Ñ Ð¿ÑовеÑÑемого ÑвойÑÑва.
ÐпиÑание
ÐаждÑй обÑекÑ, пÑоизоÑедÑий Ð¾Ñ Object, наÑледÑÐµÑ Ð¼ÐµÑод hasOwnProperty. ÐÑÐ¾Ñ Ð¼ÐµÑод Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñого, ÑодеÑÐ¶Ð¸Ñ Ð»Ð¸ обÑÐµÐºÑ Ñказанное ÑвойÑÑво в каÑеÑÑве ÑобÑÑвенного ÑвойÑÑва обÑекÑа; в оÑлиÑие Ð¾Ñ Ð¾Ð¿ÐµÑаÑоÑа in, ÑÑÐ¾Ñ Ð¼ÐµÑод не пÑовеÑÑÐµÑ ÑÑÑеÑÑвование ÑвойÑÑв в ÑепоÑке пÑоÑоÑипов обÑекÑа.
ÐÑимеÑÑ
>ÐÑимеÑ: иÑполÑзование hasOwnProperty Ð´Ð»Ñ Ð¿ÑовеÑки ÑÑÑеÑÑÐ²Ð¾Ð²Ð°Ð½Ð¸Ñ ÑвойÑÑва
Ð ÑледÑÑÑем пÑимеÑе опÑеделÑеÑÑÑ, ÑодеÑÐ¶Ð¸Ñ Ð»Ð¸ обÑÐµÐºÑ o ÑвойÑÑво Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ prop:
o = new Object();
o.prop = "ÑÑÑеÑÑвÑеÑ";
function changeO() {
o.newprop = o.prop;
delete o.prop;
}
o.hasOwnProperty("prop"); // веÑнÑÑ true
changeO();
o.hasOwnProperty("prop"); // веÑнÑÑ false
ÐÑимеÑ: ÑобÑÑвеннÑе и ÑнаÑледованнÑе ÑвойÑÑва
СледÑÑÑий пÑÐ¸Ð¼ÐµÑ Ð¿Ð¾ÐºÐ°Ð·ÑÐ²Ð°ÐµÑ ÑазниÑÑ Ð¼ÐµÐ¶Ð´Ñ ÑобÑÑвеннÑми ÑвойÑÑвами и ÑвойÑÑвами, ÑнаÑледованнÑми ÑеÑез ÑепоÑÐºÑ Ð¿ÑоÑоÑипов:
o = new Object();
o.prop = "ÑÑÑеÑÑвÑеÑ";
o.hasOwnProperty("prop"); // веÑнÑÑ true
o.hasOwnProperty("toString"); // веÑнÑÑ false
o.hasOwnProperty("hasOwnProperty"); // веÑнÑÑ false
ÐÑимеÑ: Ð¾Ð±Ñ Ð¾Ð´ ÑвойÑÑв обÑекÑа
СледÑÑÑий пÑÐ¸Ð¼ÐµÑ Ð¿Ð¾ÐºÐ°Ð·ÑваеÑ, как иÑеÑиÑоваÑÑÑÑ Ð¿Ð¾ ÑвойÑÑвам обÑекÑа Ñ Ð¿ÑопÑÑком ÑнаÑледованнÑÑ
ÑвойÑÑв. ÐбÑаÑиÑе внимание, ÑÑо Ñикл for...in Ñже пÑоÑ
Ð¾Ð´Ð¸Ñ ÑолÑко по пеÑеÑиÑлÑемÑм ÑлеменÑам, Ñак ÑÑо не надо на оÑновании оÑÑÑÑÑÑÐ²Ð¸Ñ Ð½Ðµ пеÑеÑиÑлÑемÑÑ
ÑвойÑÑв, показÑваемÑÑ
в Ñикле, ÑÑиÑаÑÑ, ÑÑо меÑод hasOwnProperty Ñам огÑаниÑÐ¸Ð²Ð°ÐµÑ ÑвойÑÑва ÑолÑко пеÑеÑиÑлÑемÑми ÑлеменÑами (как ÑÑо Ð´ÐµÐ»Ð°ÐµÑ Ð¼ÐµÑод Object.getOwnPropertyNames()).
var buz = {
fog: "stack",
};
for (var name in buz) {
if (buz.hasOwnProperty(name)) {
alert("ÑÑо ÑоÑно ÑÑман (" + name + "). ÐнаÑение: " + buz[name]);
} else {
alert(name); // toString или ÑÑо-Ñо еÑÑ
}
}
ÐÑимеÑ: hasOwnProperty как ÑвойÑÑво
JavaScript не заÑиÑÐ°ÐµÑ Ð¸Ð¼Ñ ÑвойÑÑва hasOwnProperty; Ñаким обÑазом, вполне Ð¼Ð¾Ð¶ÐµÑ ÑÑÑеÑÑвоваÑÑ Ð¾Ð±ÑÐµÐºÑ Ñ Ñаким ÑвойÑÑвом, поÑÑÐ¾Ð¼Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¿ÑавилÑного ÑезÑлÑÑаÑа нÑжно иÑполÑзоваÑÑ Ð²Ð½ÐµÑний меÑод hasOwnProperty:
var foo = {
hasOwnProperty: function () {
return false;
},
bar: "ТÑÑ Ð´ÑаконÑ",
};
foo.hasOwnProperty("bar"); // вÑегда возвÑаÑÐ°ÐµÑ false
// ÐÑполÑзÑем меÑод hasOwnProperty дÑÑгого обÑекÑа и вÑзÑваем его Ñ Ð¿ÐµÑедаÑей foo в каÑеÑÑве this
({}).hasOwnProperty.call(foo, "bar"); // true
// Также Ð´Ð»Ñ ÑÑиÑ
Ñелей можно иÑполÑзоваÑÑ ÑвойÑÑво hasOwnProperty из пÑоÑоÑипа Object
Object.prototype.hasOwnProperty.call(foo, "bar"); // true
ÐбÑаÑиÑе внимание, ÑÑо в поÑледнем ÑлÑÑае новÑе обÑекÑÑ Ð½Ðµ ÑоздаÑÑÑÑ.
СпеÑиÑикаÑии
| Specification |
|---|
| ECMAScript® 2027 Language Specification > # sec-object.prototype.hasownproperty > |