1966 Stimmen

Wie prüfe ich, ob ein Objekt einen Schlüssel in JavaScript hat?

Was ist das Richtige zu tun?

if (myObj['key'] == undefined)

ou

if (myObj['key'] == null)

ou

if (myObj['key'])

1 Stimmen

2 Stimmen

Sie können versuchen !!myObj.key die zurückgibt true (falls vorhanden) und false (falls nicht).

13 Stimmen

@Anh-ThiDINH sei vorsichtig, das funktioniert nicht mit booleschen Werten. const user = { name: "John", admin: false }; !!user.name wird true zurückgegeben. Aber !!user.admin gibt false zurück, obwohl der Schlüssel 'admin' existiert

3410voto

ForYourOwnGood Punkte 35214

Versuchen Sie die JavaScript in Betreiber .

if ('key' in myObj)

Und andersherum.

if (!('key' in myObj))

Seien Sie vorsichtig! El in Operator passt zu allen Objektschlüsseln, auch zu denen in der Prototypenkette des Objekts.

Verwenden Sie myObj.hasOwnProperty('key') um die eigenen Schlüssel eines Objekts zu überprüfen und gibt nur true wenn key ist verfügbar unter myObj direkt:

myObj.hasOwnProperty('key')

Es sei denn, Sie haben einen besonderen Grund für die Verwendung der in Operator, mit myObj.hasOwnProperty('key') führt zu dem Ergebnis, nach dem die meisten Codes suchen.

102 Stimmen

Der Grund, warum "in" als nicht gut angesehen wird, ist, dass es die gesamte Prototypenkette durchsucht.

6 Stimmen

Und noch besser - if(myObj && 'Schlüssel' in myObj)

37 Stimmen

Was ist falsch daran, die gesamte Prototypenkette zu durchsuchen (es sei denn, Sie wissen, dass Sie das aus irgendeinem Grund nicht wollen)?

882voto

typeoneerror Punkte 53668

Sie sollten Folgendes verwenden hasOwnProperty . Zum Beispiel:

myObj.hasOwnProperty('myKey');

Anmerkung: Wenn Sie ESLint verwenden, kann der obige Befehl zu einer Fehlermeldung führen, weil er gegen die no-prototype-builtins Regel, in diesem Fall ist die Abhilfe wie folgt:

Object.prototype.hasOwnProperty.call(myObj, 'myKey');

3 Stimmen

Ein Problem, das ich mit hasOwnProperty in Firefox gefunden habe, ist, dass es false für geerbte Schlüssel zurückgibt

305 Stimmen

@maldy: Ist das nicht der Sinn von has**Own**Property ?

2 Stimmen

Für vererbte Schlüssel können Sie wie folgt prüfen if(myObj.key.key) es wird true zurückgegeben, wenn es existiert

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X