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

Relaterade artiklar