Object.prototype.hasOwnProperty()

Il metodo hasOwnProperty() restituisce un boolean che indica se l'oggetto ha o meno la proprieta' specificata.

Sintassi

obj.hasOwnProperty(prop)

Parametri

prop
Il nome della proprieta' da testare.

Descrizione

Qualsiasi oggetto discendente da Object eredita il metodo hasOwnProperty . Questo puo' essere usato per determinare se un oggetto possiede la proprieta specificata come una proprieta' diretta di quell'oggetto;  al contrario dell'operatore in , questo metodo non controlla la catena del prototipo dell'oggetto.

Esempi

Uso di hasOwnProperty per controllare l'esistenza di una proprieta'

Il seguente esempio controlla se l'oggetto o contiene una proprieta' chiamata prop:

o = new Object();
o.prop = 'exists';

function changeO() {
  o.newprop = o.prop;
  delete o.prop;
}

o.hasOwnProperty('prop');   // restituisce true
changeO();
o.hasOwnProperty('prop');   // restituisce false

Proprieta' dirette ed ereditate a confronto

Il seguente esempio distingue tra proprieta' dirette e proprieta' ereditate attraverso la catena del prototipo:

o = new Object();
o.prop = 'exists';
o.hasOwnProperty('prop');             // restituisce true
o.hasOwnProperty('toString');         // restituisce false
o.hasOwnProperty('hasOwnProperty');   // restituisce false

Scorrere le proprieta' di un oggetto

Il seguente esempio mostra come scorrere le proprieta' di un oggetto, senza eseguire il codice per le proprieta' ereditate . Notate che il ciclo for...in sta gia' di per se' scorrendo proprieta' enumerabili, cosi' non si deve assumere, basandosi sulla assenza di proprieta' non enumerabili nel ciclo, che il metodo hasOwnProperty stesso sia strettamente lmitato a elementi numerabili (as with Object.getOwnPropertyNames()).

var buz = {
  fog: 'stack'
};

for (var name in buz) {
  if (buz.hasOwnProperty(name)) {
    console.log('this is fog (' + name + ') for sure. Value: ' + buz[name]);
  }
  else {
    console.log(name); // toString o qualcos'altro
  }
}

Usare hasOwnProperty come nome di una proprieta'

JavaScript non protegge il nome di proprieta' hasOwnProperty; cosi', se esiste la possiilita' che un oggetto abbia una proprieta' con questo nome, per avere risultati corretti e' necessario utilizzare un  hasOwnProperty esterno:

var foo = {
  hasOwnProperty: function() {
    return false;
  },
  bar: 'Here be dragons'
};

foo.hasOwnProperty('bar'); // restituisce sempre false

// Usa hasOwnProperty di un altro oggetto e lo chiama con 'this' impostato a foo
({}).hasOwnProperty.call(foo, 'bar'); // true

// Per questo scopo e' anche possibile usare la proprieta' hasOwnProperty dal prototipo dell'oggetto 
Object.prototype.hasOwnProperty.call(foo, 'bar'); // true

Nota che nell'ultimo caso non ci sono oggetti appena creati.

Specifiche

Specifica Status Commento
ECMAScript 3rd Edition (ECMA-262) Standard Definizione iniziale. Implementato 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  
ECMAScript 2017 Draft (ECMA-262)
The definition of 'Object.prototype.hasOwnProperty' in that specification.
Draft  

Compatibilita' con i Browser 

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Supporto di base (Yes) (Yes) (Yes) (Yes) (Yes)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Supporto di base (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

Vedi anche

Tag del documento e collaboratori

 Hanno collaborato alla realizzazione di questa pagina: tiberakis
 Ultima modifica di: tiberakis,