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) |