Dal hasOwnProperty presenta alcuni avvertimenti e svantaggi (finestra/uso esteso in ie8 problemi/ecc.).Vantaggio dell'utilizzo di Object.hasOwnProperty vs testing se Property is undefined
mi chiedevo se non v'è alcuna ragione di utilizzare anche ad esso, e se semplicemente testare se una proprietà non è definito è meglio giustificato & più semplicistico.
Ad esempio:
var obj = { a : 'here' };
if (obj.hasOwnProperty('a')) { /* do something */ }
if (obj.a !== undefined) { /* do something */ }
// or maybe (typeof (obj.a) !== 'undefined')
Chiedo solo se qualcuno ha qualche buona intuizione su questo, preferirei essere utilizzando le più cross-browser amichevole, e fino a data di metodologia.
Ho visto anche questo prototipo over-scrittura per hasOwnProperty, che funziona, ma io non sono venduti su di esso di utilità ...
if (!Object.prototype.hasOwnProperty) {
Object.prototype.hasOwnProperty = function(prop) {
var proto = this.__proto__ || this.constructor.prototype;
return (prop in this) && (!(prop in proto) || proto[prop] !== this[prop]);
};
}
Qualcosa di diverso da utilizzare 'hasOwnProperty' è garantito per produrre falsi positivi o negativi – Xotic750
se lo so Sto cercando una matrice o un oggetto o una funzione, la preferisco ancora più semplice: if (obj.a). Naturalmente, se obj.a può essere zero, "" o false, è necessario confrontarlo con! == undefined. inoltre, questo oggetto ha una "a" secondo ("a" in obj), ma non se (obj.a): {a: undefined} – dandavis
Ulteriori informazioni: Potresti trovare interessante questo test jsPerf: http: // jsperf .com/hasOwnProperty-vs-in/2. In conclusione: '.hasOwnProperty' è ** molto ** più lento di qualsiasi altro modo di testare l'esistenza della proprietà (che è stato sorprendente per me TBH). –