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

Relaterte artikler