Gibt es in JavaScript einen Operator "nicht in", mit dem überprüft werden kann, ob eine Eigenschaft in einem Objekt nicht vorhanden ist? Ich konnte nichts über Google oder Stack Overflow finden. Hier ist ein kleiner Codeausschnitt, 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 else
Erklärung aufnehmen. Es scheint mir falsch, eine if
- else
Anweisung zu erstellen, nur um den else
Teil zu verwenden.
var id = ...
in Ihrer Funktion.Antworten:
Negieren Sie einfach Ihren Zustand und Sie erhalten die
else
Logik inif
:quelle
( ! somekey in someobj )
let keyExists = (key, obj) => key in obj
let hasProperty
"sieht" besser ausWie bereits von Jordão gesagt, negiere es einfach:
Hinweis: Der obige Test, wenn tutorTimes eine Eigenschaft mit dem in id angegebenen Namen an einer beliebigen Stelle in der Prototypkette hat. Gibt beispielsweise true
"valueOf" in tutorTimes
zurück , da es in Object.prototype definiert ist .Wenn Sie testen möchten, ob im aktuellen Objekt keine Eigenschaft vorhanden ist, verwenden Sie hasOwnProperty:
Oder wenn Sie einen Schlüssel haben, der hasOwnPropery ist, können Sie diesen verwenden:
quelle
if(!tutorTimes.hasOwnProperty('id')) ...
?id
ist eine Variable, die einen beliebigen Wert haben kann. Es'id'
handelt sich um eine Zeichenfolge mit den beiden Buchstaben i und d .hasOwnProperty(id)
Überprüfen Sie daher , ob die in der Variablen- ID angegebene Eigenschaft vorhanden ist, undhasOwnProperty('id')
ob eine Eigenschaft mit dem Namen id vorhanden ist.Persönlich finde ich
leichter zu lesen als
aber beide werden funktionieren.
quelle
Zwei schnelle Möglichkeiten:
oder
quelle
'undefined' === typeof xxx
stattdessen.undefined
ist kein reserviertes Wort und ist tatsächlich eine globale Variable, die überschrieben werden kann (was zu schwer zu findenden Fehlern führt)'foo' in myObj)
myObj['foo']
könnte als Eigenschaft existieren und einfach aufundefined
(dh mit der AnweisungmyObj.foo = undefined
) gesetzt werden. Wenn Sie wirklich sehen möchten, ob die Eigenschaft selbst nicht vorhanden ist, benötigen Sie die!('foo' in myObj)
Notation.myObj.foo === undefined
viel schneller (wenn auch potenziell gefährlich): jsperf.com/not-in-vs-is-undefined .=== undefined
. Viele Dinge können kaputt gehen, wenn Leute eine Programmiersprache missbrauchen, indem sie beispielsweiseundefined
JavaScript überschreiben . Siehe auch: stackoverflow.com/questions/8783510/…