--- title: Object.prototype.hasOwnProperty() slug: Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty translation_of: Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty original_slug: Web/JavaScript/Referencje/Obiekty/Object/hasOwnProperty ---
{{JSRef("Global_Objects", "Object")}}

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

prop
Nazwa ({{jsxref("String")}}) własności lub Symbol, do sprawdzenia.

Wartość zwracana

A {{jsxref ("Boolean")}} wskazujący, czy obiekt zawiera w sobie określoną właściwość.

Opis

Każdy obiekt pochodzący od {{jsxref("Global_Objects/Object", "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 {{jsxref("Operators/in", "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 {{jsxref("Statements/for...in", "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.
{{SpecName('ES5.1', '#sec-15.2.4.5', 'Object.prototype.hasOwnProperty')}} {{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-object.prototype.hasownproperty', 'Object.prototype.hasOwnProperty')}} {{Spec2('ES6')}}

Wsparcie przeglądarek

{{Compat("javascript.builtins.Object.hasOwnProperty")}}

Zobacz także