1872 Stimmen

Wie prüfe ich, ob ein Objekt eine bestimmte Eigenschaft in JavaScript hat?

Wie prüfe ich, ob ein Objekt eine bestimmte Eigenschaft in JavaScript hat?

Bedenken Sie:

x = {'key': 1};
if ( x.hasOwnProperty('key') ) {
    //Do this
}

Ist das der beste Weg?

32 Stimmen

Ich habe einen jsperf-Test mit den Antworten aller geschrieben, um zu sehen, wer am schnellsten ist: jsperf.com/wörterbuch-enthaelt-schluessel

0 Stimmen

('propertyName' in Object) ? 'Eigenschaft ist vorhanden' : 'Eigenschaft ist nicht vorhanden'

2 Stimmen

@styfle danke für den jsperf-Test. in y hasOwnProperty herausgekommen Weg für mich langsamer als die anderen (98 % langsamer). Ich bin nicht überrascht über hasOwnProperty langsamer zu sein, aber ich bin überrascht über in .

19voto

if(x.hasOwnProperty("key")){
  // …
}

denn

if(x.key){
  // …
}

scheitert, wenn x.key fehlerhaft ist (zum Beispiel, x.key === "" ).

17voto

Abdullah Danyal Punkte 996

Tun Sie dies nicht object.hasOwnProperty(key)) . Das ist wirklich schlecht, weil diese Methoden durch Eigenschaften des betreffenden Objekts überschattet werden können - siehe { hasOwnProperty: false } - oder, das Objekt kann ein Null-Objekt sein (Object.create(null)) .

Der beste Weg ist Object.prototype.hasOwnProperty.call(object, key) oder:

const has = Object.prototype.hasOwnProperty; // Cache the lookup once, in module scope.
console.log(has.call(object, key));
/* Or */
import has from 'has'; // https://www.npmjs.com/package/has
console.log(has(object, key));

6 Stimmen

Ich stimme dieser Methode zu, und sie sollte die akzeptierte Antwort sein, da sie die sicherste Methode ist und gleichzeitig die Leistung aufrechterhält! eslint.org/docs/rules/no-prototype-builtins sagt: "Zum Beispiel wäre es für einen Webserver unsicher, JSON-Eingaben von einem Client zu parsen und hasOwnProperty direkt auf dem resultierenden Objekt aufzurufen, da ein böswilliger Client einen JSON-Wert wie {"hasOwnProperty": 1} senden und den Server zum Absturz bringen."

17voto

Wilt Punkte 36662

Sie können auch Folgendes verwenden die ES6 Reflect Objekt :

x = {'key': 1};
Reflect.has( x, 'key'); // returns true

Dokumentation auf MDN für Reflect.has kann gefunden werden aquí .

Die statische Reflect.has() Methode funktioniert wie die in Betreiber als eine Funktion.

13voto

sheats Punkte 30812

OK, es sieht so aus, als hätte ich die richtige Antwort, es sei denn, Sie wollen keine vererbten Eigenschaften:

if (x.hasOwnProperty('key'))

Hier sind einige weitere Optionen für die Einbeziehung von geerbten Eigenschaften:

if (x.key) // Quick and dirty, but it does the same thing as below.

if (x.key !== undefined)

4 Stimmen

Achtung: x.hasOwnProperty('key') kann wahr sein, während x.key !== undefined nicht wahr ist.

5 Stimmen

Für var x = { key: false }; その x.key Methode wäre falsch.

2 Stimmen

Wenn (x.key) nicht korrekt ist, weil x = {key:0}, wird die Prüfung nicht bestanden.

10voto

Jamie Hutber Punkte 24382

Eine weitere relativ einfache Möglichkeit ist die Verwendung von Object.keys . Dies gibt eine array was bedeutet, dass Sie alle Funktionen eines Arrays erhalten.

var noInfo = {};
var info = {something: 'data'};

Object.keys(noInfo).length //returns 0 or false
Object.keys(info).length //returns 1 or true

Wir leben zwar in einer Welt mit großartiger Browserunterstützung. Da diese Frage schon so alt ist, dachte ich, ich füge dies hinzu: Dies ist sicher zu verwenden ab JavaScript v1.8.5 .

0 Stimmen

Richtig, aber was wäre, wenn Sie wissen wollten, ob eine Information eine Eigenschaft mit dem Namen "someotherthing" hat? Ich denke, das ist es, wonach OP sucht.

3 Stimmen

Dann würden Sie Folgendes tun Object.keys(info).indexOf('someotherthing') !== -1

0 Stimmen

Was ist "JS v1.8.5" ? "JavaScript v1.8.5"*? Es scheint keine Übereinstimmung zu geben mit ECMAScript Version (Version 8 wurde 2017 veröffentlicht). jQuery 1.8 wurde im Jahr 2012 veröffentlicht.

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