Wstęp
Metoda hasOwnProperty()
zwraca wartość true
jeśli obiekt, na którym została wywołana posiada konkretną własność.
Składnia
obj.hasOwnProperty(prop)
Parametry
Wartość zwracana
A Boolean
wskazujący, czy obiekt zawiera w sobie określoną właściwość.
Opis
Każdy obiekt pochodzący od Object
dziedziczy metodę hasOwnProperty
. Może być ona użyta do stwierdzenia czy obiekt posiada określoną własność, jako bezpośrednią (direct) własność. W przeciwieństwie do operatora in
, metoda hasOwnProperty
nie sprawdza w głąb łańcucha własności obiektu.
Notatka
hasOwnProperty
zwraca true
, nawet jeśli wartość właściwości to null
lub undefined
.
o = new Object();
o.propOne = null;
o.hasOwnProperty('propOne'); // zwraca true
o.propTwo = undefined;
o.hasOwnProperty('propTwo'); // zwraca true
Przykłady
Użycie hasOwnProperty do testowania istnienia własności
Poniższy przykład określa czy obiekt o
posiada własność o nazwie prop
:
o = new Object();
o.hasOwnProperty('prop'); // zwraca false
o.prop = 'istnieje';
o.hasOwnProperty('prop'); // zwraca true
Własności bezpośrednie kontra odziedziczone
Poniższy przykład rozróżnia bezpośrednie właściwości z właściwościami dziedziczonymi w łańcuchu prototypów:
o = new Object();
o.prop = 'istnieje';
o.hasOwnProperty('prop'); // zwraca true
o.hasOwnProperty('toString'); // zwraca false
o.hasOwnProperty('hasOwnProperty'); // zwraca false
Iterowanie przez właściwości obiektu
Poniższy przykład ilustruje sposób iteracji po właściwościach obiektu bez wykonywania iteracji na dziedziczonych właściwościach.
const obj = { prop: 'Wartość', secondProp: 'Wartość 2' } for (const name in obj) { if (obj.hasOwnProperty(name)) { console.log('Znaleziono własność ' + name + ' o wartości ' + obj[name]) } else { console.log('Brak własności: ', name) } }
Zwróć uwagę, że pętla for...in
tylko iteruje właściwości przeliczalne, a nieprzeliczanych nie zauważa.
Używanie hasOwnProperty jako nazwy właściwości
JavaScript nie chroni nazwy właściwości hasOwnProperty
; tak więc, jeśli istnieje możliwość, że obiekt może mieć właściwość o tej nazwie, konieczne jest użycie zewnętrznej właściwości hasOwnProperty
, aby uzyskać poprawne wyniki:
const obj = {
hasOwnProperty: function() {
return false;
},
prop: 'Kolejna właściwość'
};
obj.hasOwnProperty('prop'); // zawsze zwróci false
// Użyj właściwości hasOwnProperty innego obiektu i wywołaj ją, ustawiając "this" na obj
({}).hasOwnProperty.call(obj, 'prop'); // zwraca true
// W tym celu można również użyć własności hasOwnProperty z prototypu Object
Object.prototype.hasOwnProperty.call(obj, 'prop'); // zwraca true
Zwróć uwagę, że w ostatnim przypadku nie ma żadnych nowo utworzonych obiektów.
Specyfikacja
Specification | Status | Comment |
---|---|---|
ECMAScript 3rd Edition. | Standard | Initial definition. Implemented in JavaScript 1.5. |
ECMAScript 5.1 (ECMA-262) The definition of 'Object.prototype.hasOwnProperty' in that specification. |
Standard | |
ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'Object.prototype.hasOwnProperty' in that specification. |
Standard |
Wsparcie przeglądarek
BCD tables only load in the browser
Tabela zgodności na tej stronie jest generowana na podstawie danych strukturalnych. Jeśli chcesz przyczynić się do danych, sprawdź https://github.com/mdn/browser-compat-data i wyślij nam pull request'a.