2012-02-22 11 views
32
If(somevar.hasOwnProperty('someProperty')) { 
// do something(); 
} else { 
// do sometingelse(); 
} 

Qual è il corretto uso/spiegazione di hasOwnProperty('someProperty')?Javascript che cos'è la proprietà in hasOwnProperty?

Perché non è possibile utilizzare semplicemente somevar.someProperty per verificare se un oggetto somevar contiene una proprietà con il nome someProperty?

Che è una proprietà in questo caso?

Cosa proprietà fa questo controllo JavaScript?

+2

http://stackoverflow.com/questions/2600085/hasownproperty-in-javascript –

+0

Quando ho posto questa domanda ho pensato che fosse una funzione che controllava qualche html. Ora vedo che controlla un oggetto o un metodo javascript per una 'variabile' all'interno di quell'oggetto o metodo. thnx! – FLY

+0

Dai un'occhiata a https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/HasOwnProperty –

risposta

61

hasOwnProperty restituisce un valore booleano che indica se l'oggetto sul quale si sta chiamando ha una proprietà con il nome dell'argomento. Ad esempio:

var x = { 
    y: 10 
}; 
console.log(x.hasOwnProperty("y")); //true 
console.log(x.hasOwnProperty("z")); //false 

Tuttavia, non osserva la catena di prototipi dell'oggetto.

E 'utile usarlo quando si enumera le proprietà di un oggetto con il for...in costrutto.

Se si desidera visualizzare tutti i dettagli, il ES5 specification è, come sempre, un buon posto dove cercare.

+3

Punti bonus per la catena del prototipo. Sto ancora cercando di capire a cosa sta chiamando quando non ha chiamato su un oggetto ...non è 'window' –

+0

@KristofferSHansen - Mi stavo chiedendo anche questo, ma la domanda è stata modificata e ora viene chiamata su un oggetto. Quando non lo è, viene generato un errore. –

+0

Suppongo che cambi le cose. Nessun errore se eseguito da console in Chrome però. –

7

controlla:

Restituisce un valore booleano che indica se un oggetto ha una proprietà con il nome specificato

Il metodo hasOwnProperty restituisce true se oggetto ha una proprietà con il nome specificato, false se non lo fa . Questo metodo non controlla se la proprietà esiste nella catena di prototipi dell'oggetto; la proprietà deve essere un membro dell'oggetto stesso.

Esempio:

var s = new String("Sample"); 
document.write(s.hasOwnProperty("split"));      //false 
document.write(String.prototype.hasOwnProperty("split"));   //true 
+0

y - 1?/Ho capito male? –

+1

Ho dato un -1 perché la tua risposta iniziale era una frase breve e del tutto incoerente, che è stata poi aggiornata ad una frase leggermente più lunga, leggermente più coerente, ma del tutto imprecisa. –

+0

@ amnotiam- ma penso che sia molto chiaro ora ... è perché il mio problema di internet non riesco a postare più .......... –

0

E checks if an object has a property. Funziona allo stesso modo di if(obj.prop), per quanto ne so.

+3

'obj.prop' segue la catena del prototipo,' hasOwnProperty' non è –

+3

Il problema è quando 'prop' ha un valore falso. 'if (obj.hasOwnProperty ('prop'))' sarà 'true' mentre' if (obj.prop) 'sarà' false'. –

1

hasOwnProperty è una normale funzione JavaScript che prende un argomento stringa.

Nel tuo caso somevar.hasOwnProperty ('someProperty') che controlla la funzione somevar ha somepropery o meno ,, che tornare vero e falso

Say

function somevar() { 
    this.someProperty= "Generic"; 
    } 

function welcomeMessage() 
{ 
    var somevar1= new somevar(); 
     if(somevar1.hasOwnProperty("name")) 
{ 
alert(somevar1.hasOwnProperty("name"));// it will return true 
} 
} 
1

Si utilizza Object.hasOwnProperty (p) per determinare se l'oggetto ha un enumerabile proprietà p -

oggetto può avere una propria prototipo, dove i metodi e gli attributi 'default' sono assegnati a ogni istanza di oggetto. hasOwnProperty restituisce true solo per le proprietà che sono state specificatamente impostate nel costruttore o aggiunte successivamente all'istanza.

per determinare se p è definito a tutti, ovunque, per l'oggetto, utilizzare if (p oggetto instanceof), dove p restituisce una stringa di proprietà-nome.

Ad esempio, per impostazione predefinita tutti gli oggetti hanno un metodo 'toString', ma non verranno visualizzati in hasOwnProperty.

0

Ho anche scritto questo semplice componente riutilizzabile object-hasOwnProperty restituendo un valore booleano per verificare se l'oggetto ha una proprietà specificata. Ha 2 esempi e 3 test che possono aiutare a capire meglio il comportamento del caso d'uso reale.

Esempi:

hasOwnProperty({foo: 'bar'}, 'foo') // => true 
hasOwnProperty({foo: 'bar'}, 'bar') // => false 

casi d'uso testati:

hasOwnProperty() should return false as given object do not contain key `bar` 
hasOwnProperty() should return true as given object contains key `foo` 
hasOwnProperty() should return false if key is null 

Qui come funziona:

function hasOwnProperty(obj: {}, prop: string|number): boolean { 
    return Object.prototype.hasOwnProperty.call(obj, prop); 
}; 
3

Ecco risposta breve e precisa:

in Javascript ogni oggetto ha un panino ch di coppie chiave-valore integrate che hanno meta-informazioni sull'oggetto. Quando passi in rassegna tutte le coppie chiave-valore usando il costrutto/loop for...in per un oggetto che stai scorrendo attraverso le coppie chiave-valore di meta-informazioni (che sicuramente non vuoi).

enter image description here

Utilizzando hasOwnPropery(property)filtri-out questi inutili scorrendo meta-informazioni e direttamente controlla che è il parametro property è user data proprietà nell'oggetto oppure no. Per filtri fuori, voglio dire, che hasOwnProperty(property) non sembra se, property esista nella catena di prototipi di Object aka meta-informazioni.

Restituisce booleano true/false basato su quello.

Ecco un esempio:

var fruitObject = {"name": "Apple", "shape": "round", "taste": "sweet"}; 
 
console.log(fruitObject.hasOwnProperty("name")); //true 
 
console.log(Object.prototype.hasOwnProperty("toString");) //true because in above snapshot you can see, that there is a function toString in meta-information

spero che sia chiaro!

Problemi correlati