Gibt es in JavaScript einen „nicht in“-Operator zum Prüfen von Objekteigenschaften?

Lesezeit: 3 Minuten

Benutzer-Avatar
Aaron

Gibt es in JavaScript eine Art “nicht in”-Operator, um zu überprüfen, ob eine Eigenschaft in einem Objekt nicht vorhanden ist? Ich konnte nichts darüber bei Google oder Stack Overflow finden. Hier ist ein kleines Code-Snippet, an dem ich arbeite, wo ich diese Art von Funktionalität benötige:

var tutorTimes = {};

$(checked).each(function(idx){
  id = $(this).attr('class');

  if(id in tutorTimes){}
  else{
    //Rest of my logic will go here
  }
});

Wie Sie sehen können, würde ich alles in die stecken else Aussage. Es erscheint mir falsch, eine einzurichten ifelse Anweisung, nur die zu verwenden else Portion.

  • Ich denke, Sie möchten vielleicht var id = ... in Ihrer Funktion.

    – Cobby

    20. November 2012 um 2:20 Uhr

Es erscheint mir falsch, eine if / else-Anweisung einzurichten, nur um den else-Teil zu verwenden …

Negieren Sie einfach Ihre Bedingung, und Sie erhalten die else Logik innerhalb der if:

if (!(id in tutorTimes)) { ... }

  • Dieser Stil behebt auch die JSHint-Warnung „Verwirrende Verwendung von ‘!’“, die Sie erhalten würden, wenn Sie dies tun würden ( ! somekey in someobj )

    – Mikemaccana

    10. Mai 2012 um 11:32 Uhr

  • Bitte beachte, dass in sucht nach dem Eigenschaftsnamen irgendwo in der Prototypenkette. Siehe meine Antwort für weitere Details.

    – etwas

    24. September 2012 um 22:19 Uhr

  • Ich verstehe, dass dies derzeit die beste Lösung ist, aber stimmt noch jemand zu, dass dies irgendwie hässlich ist?

    – Jona

    3. Juni 2016 um 1:58 Uhr

  • Wenn es hässlich ist, packen Sie es einfach in eine Funktion und geben Sie ihm einen schönen Namen 🙃 let keyExists = (key, obj) => key in obj

    – Kamafeder

    27. August 2018 um 21:52 Uhr

  • Ich bin vollkommen einverstanden. In der Tat könnten meine Namensfähigkeiten auch verbessert werden 😁. let hasProperty “sieht besser aus

    – Kamafeder

    27. August 2018 um 23:55 Uhr


Ich persönlich finde

if (id in tutorTimes === false) { ... }

leichter zu lesen als

if (!(id in tutorTimes)) { ... }

aber beides geht.

  • Vielen Dank. Ich bevorzuge auch die direktere Variante. Das andere ist in Ordnung, aber mehr Zeichen zu lesen und zu berücksichtigen. “wenn etwas falsch ist” ist leicht zu verstehen

    – James

    4. April um 1:24

Wie schon von Jordão gesagt, negiere es einfach:

if (!(id in tutorTimes)) { ... }

Hinweis: Der obige Test, ob tutorTimes eine Eigenschaft mit dem in id angegebenen Namen hat, irgendwo in der Prototypenkette. Zum Beispiel "valueOf" in tutorTimes kehrt zurück Stimmt weil es in definiert ist Objekt.Prototyp.

Wenn Sie testen möchten, ob eine Eigenschaft im aktuellen Objekt nicht vorhanden ist, verwenden Sie hasOwnProperty:

if (!tutorTimes.hasOwnProperty(id)) { ... }

Oder ob Sie vielleicht einen Schlüssel haben hatEigeneEigenschaft Sie können dies verwenden:

if (!Object.prototype.hasOwnProperty.call(tutorTimes,id)) { ... }

  • Ist es überhaupt sicherer um den Schlüssel in Anführungszeichen zu setzen und zu verwenden if(!tutorTimes.hasOwnProperty('id')) ...?

    – Majid Fouladpour

    16. Mai 2018 um 21:17 Uhr

  • @MajidFouladpour id ist eine Variable, die jeden Wert haben könnte, 'id' ist eine Zeichenfolge mit den beiden Buchstaben ich und dAlso hasOwnProperty(id) prüft, ob die in der Variablen angegebene Eigenschaft Ich würde existiert, und hasOwnProperty('id') prüft, ob es eine Eigenschaft namens id gibt.

    – etwas

    17. Mai 2018 um 14:29 Uhr

Zwei schnelle Möglichkeiten:

if(!('foo' in myObj)) { ... }

oder

if(myObj['foo'] === undefined) { ... }

Benutzer-Avatar
Alex Irabor

Sie können die Bedingung auf falsch setzen

if ((id in tutorTimes === false)) { ... }

1311760cookie-checkGibt es in JavaScript einen „nicht in“-Operator zum Prüfen von Objekteigenschaften?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy