Object.prototype.hasOwnProperty()

Czytasz angielską wersję tego artykułu, ponieważ nie ma jeszcze tłumaczenia dla tego języka. Pomóż nam przetłumaczyć ten artykuł!

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 (String) własności lub Symbol, do sprawdzenia.

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 obietu.

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

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
hasOwnPropertyChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 5.5Opera Full support YesSafari Full support YesWebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support 1.0nodejs Full support Yes

Legend

Full support  
Full support

Zobacz także