Hvordan avgjøre om et objekt har en gitt egenskap i JavaScript
Hvordan kan jeg avgjøre om et objekt x har en definert egenskap y, uavhengig av verdien til x.y?
Jeg bruker for øyeblikket
if (typeof(x.y) !== 'undefined')
men det virker litt clunky. Finnes det en bedre måte?
Svar #1
Objekt har egenskap:
Hvis du tester for egenskaper som finnes på selve objektet (ikke en del av dets prototypekjede), kan du bruke .hasOwnProperty():
if (x.hasOwnProperty('y')) {
// ......
}
Objektet eller dets prototype har en egenskap:
Du kan bruke in-operatoren for å teste egenskaper som også er arvet.
if ('y' in x) {
// ......
}
Svar #2
Hvis du vil vite om objektet fysisk inneholder egenskapen @gnarf, vil svaret ved å bruke hasOwnProperty gjøre jobben.
Hvis du vil vite om egenskapen eksisterer noe sted, enten på objektet selv eller opp i prototypekjeden, kan du bruke in-operatoren.
if ('prop' in obj) {
// ...
}
F.eks.
var obj = {};
'toString' in obj == true; // inherited from Object.prototype
obj.hasOwnProperty('toString') == false; // doesn't contains it physically
Svar #3
Underscore.js eller Lodash
if (_.has(x, "y")) ...
:)
Svar #4
Du kan trimme det litt slik:
if ( x.y !== undefined ) ...
