Was ist das Richtige zu tun?
if (myObj['key'] == undefined)
ou
if (myObj['key'] == null)
ou
if (myObj['key'])
Was ist das Richtige zu tun?
if (myObj['key'] == undefined)
ou
if (myObj['key'] == null)
ou
if (myObj['key'])
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.
Der Grund, warum "in" als nicht gut angesehen wird, ist, dass es die gesamte Prototypenkette durchsucht.
Was ist falsch daran, die gesamte Prototypenkette zu durchsuchen (es sei denn, Sie wissen, dass Sie das aus irgendeinem Grund nicht wollen)?
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');
Ein Problem, das ich mit hasOwnProperty in Firefox gefunden habe, ist, dass es false für geerbte Schlüssel zurückgibt
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 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.
1 Stimmen
Einschlägige Benchmarks: jsperf.com/checking-if-a-key-exists-in-a-javascript-array
2 Stimmen
Sie können versuchen
!!myObj.key
die zurückgibttrue
(falls vorhanden) undfalse
(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' existiert0 Stimmen
Am besten wäre jetzt myObj?.key
1 Stimmen
Ich stimme mit #1700 für Ihre doppelte Frage :) Gut gemacht.