Hur man avgör om ett objekt har en viss egenskap i JavaScript
Hur kan jag avgöra om ett objekt x har en definierad egenskap y, oberoende av värdet på x.y?
Jag använder för närvarande
if (typeof(x.y) !== 'undefined')
men det verkar lite otympligt. Finns det ett bättre sätt?
Svar #1
Objekt har egenskap:
Om du testar för egenskaper som finns på själva objektet (inte som en del av dess prototypkedja) kan du använda .hasOwnProperty():
if (x.hasOwnProperty('y')) {
// ......
}
Objektet eller dess prototyp har en egenskap:
Du kan använda in-operatorn för att testa egenskaper som också är ärvda.
if ('y' in x) {
// ......
}
Svar #2
Om du vill veta om objektet fysiskt innehåller egenskapen @gnarfs svar med hasOwnProperty kommer att fungera.
Om du vill veta om egenskapen finns någonstans, antingen på själva objektet eller upp i prototypkedjan, kan du använda in-operatorn.
if ('prop' in obj) {
// ...
}
T.ex.:
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 snygga till det lite så här:
if ( x.y !== undefined ) ...
