Fügen Sie Ihre Werte in ein Array ein und überprüfen Sie, ob sich Ihr Element im Array befindet:
if ([1, 2, 3, 4].includes(test.type)) {
// Do something
}
Wenn ein von Ihnen unterstützter Browser nicht über die Array#includes
Methode verfügt, können Sie diese Polyfüllung verwenden .
Kurze Erklärung der ~
Tilde-Verknüpfung:
Update: Da wir jetzt die includes
Methode haben, macht es keinen Sinn ~
mehr , den Hack zu verwenden. Bewahren Sie dies hier für Personen auf, die wissen möchten, wie es funktioniert, und / oder die im Code anderer Benutzer darauf gestoßen sind.
Anstatt zu überprüfen, ob das Ergebnis von indexOf
ist >= 0
, gibt es eine nette kleine Verknüpfung:
if ( ~[1, 2, 3, 4].indexOf(test.type) ) {
// Do something
}
Hier ist die Geige: http://jsfiddle.net/HYJvK/
Wie funktioniert das? Wenn ein Element im Array gefunden wird, wird indexOf
sein Index zurückgegeben. Wenn der Artikel nicht gefunden wurde, wird er zurückgegeben -1
. Ohne zu sehr ins Detail zu gehen, ~
ist der ein bitweiser NOT-Operator , der 0
nur für zurückgibt-1
.
Ich verwende gerne die ~
Verknüpfung, da sie prägnanter ist als ein Vergleich des Rückgabewerts. Ich wünschte, JavaScript hätte eine in_array
Funktion, die einen Booleschen Wert direkt zurückgibt (ähnlich wie PHP), aber das ist nur Wunschdenken ( Update: das tut es jetzt. Es heißt includes
. Siehe oben). Beachten Sie, dass jQuery's inArray
, während es die Methodensignatur von PHP teilt, tatsächlich die native indexOf
Funktionalität nachahmt (was in verschiedenen Fällen nützlich ist, wenn der Index genau das ist, wonach Sie wirklich suchen).
Wichtiger Hinweis: Die Verwendung der Tilde-Verknüpfung scheint kontrovers diskutiert zu werden, da einige vehement der Ansicht sind, dass der Code nicht klar genug ist und unter allen Umständen vermieden werden sollte (siehe die Kommentare zu dieser Antwort). Wenn Sie ihre Meinung teilen, sollten Sie sich an die .indexOf(...) >= 0
Lösung halten.
Eine etwas längere Erklärung:
Ganzzahlen in JavaScript sind signiert. Dies bedeutet, dass das Bit ganz links als Vorzeichenbit reserviert ist. ein Flag, das angibt, ob die Zahl positiv oder negativ ist, wobei a 1
negativ ist.
Hier sind einige positive Beispielzahlen im 32-Bit-Binärformat:
1 : 00000000000000000000000000000001
2 : 00000000000000000000000000000010
3 : 00000000000000000000000000000011
15: 00000000000000000000000000001111
Hier sind die gleichen Zahlen, aber negativ:
-1 : 11111111111111111111111111111111
-2 : 11111111111111111111111111111110
-3 : 11111111111111111111111111111101
-15: 11111111111111111111111111110001
Warum so komische Kombinationen für die negativen Zahlen? Einfach. Eine negative Zahl ist einfach die Umkehrung der positiven Zahl + 1; Das Addieren der negativen Zahl zur positiven Zahl sollte immer ergeben 0
.
Um dies zu verstehen, führen wir eine einfache binäre Arithmetik durch.
Hier ist , wie wir hinzufügen würde -1
zu +1
:
00000000000000000000000000000001 +1
+ 11111111111111111111111111111111 -1
-------------------------------------------
= 00000000000000000000000000000000 0
Und hier ist , wie wir hinzufügen würde -15
zu +15
:
00000000000000000000000000001111 +15
+ 11111111111111111111111111110001 -15
--------------------------------------------
= 00000000000000000000000000000000 0
Wie bekommen wir diese Ergebnisse? Wenn Sie regelmäßig hinzufügen, wie wir es in der Schule gelernt haben: Sie beginnen in der Spalte ganz rechts und addieren alle Zeilen. Wenn die Summe größer ist als die größte einstellige Zahl (die dezimal 9
, aber binär ist 1
), übertragen wir den Rest in die nächste Spalte.
Wie Sie feststellen werden, hat die Spalte ganz rechts, die nicht alle 0
s ist, beim Hinzufügen einer negativen Zahl zu ihrer positiven Zahl immer zwei 1
s, was zusammen ergibt 2
. Die binäre Darstellung von zwei Wesen 10
tragen wir 1
in die nächste Spalte und setzen ein 0
für das Ergebnis in die erste Spalte. Alle anderen Spalten auf der linken Seite haben nur eine Zeile mit einem 1
, so dass sich die 1
aus der vorherigen Spalte übertragenen Werte wieder summieren 2
, was sich dann überträgt ... Dieser Vorgang wiederholt sich, bis wir zur Spalte ganz links gelangen, wo Das 1
, was übertragen werden soll, kann nirgendwo hingehen, also läuft es über und geht verloren, und wir haben 0
überall s übrig .
Dieses System heißt 2's Complement . Mehr dazu lesen Sie hier:
2's Komplementdarstellung für vorzeichenbehaftete Ganzzahlen .
Jetzt, da der Crash-Kurs im 2er-Komplement beendet ist, werden Sie feststellen, dass dies -1
die einzige Zahl ist, deren binäre Darstellung 1
überall ist.
Mit dem ~
bitweisen NOT-Operator werden alle Bits in einer bestimmten Zahl invertiert. Der einzige Weg, um 0
vom Invertieren aller Bits zurück zu kommen, besteht darin, mit 1
's all across' zu beginnen.
Das alles war also eine langatmige Art zu sagen, ~n
die nur zurückkehren wird, 0
wenn es so n
ist -1
.
in
?