値を配列に入れ、項目が配列にあるかどうかを確認します。
if ([1, 2, 3, 4].includes(test.type)) {
// Do something
}
サポートしているブラウザにArray#includesメソッドがない場合は、このポリフィルを使用できます。
~チルダショートカットの簡単な説明:
アップデート:私たちが今持っているのでincludes方法を、使用にはポイントがない~ハックはもう。それがどのように機能するかを知ることに興味がある、および/または他のコードでそれに遭遇した人のために、これをここに保持してください。
代わりに結果がかどうかをチェックするのindexOfで>= 0、ちょっといいのショートカットがあります:
if ( ~[1, 2, 3, 4].indexOf(test.type) ) {
// Do something
}
ここにフィドルがあります:http : //jsfiddle.net/HYJvK/
これはどのように作動しますか?配列でアイテムが見つかった場合は、indexOfそのインデックスを返します。アイテムが見つからなかった場合は、が返され-1ます。詳細に触れずに、~はビットごとのNOT演算子であり、0に対してのみ返され-1ます。
~戻り値を比較するよりも簡潔なので、ショートカットを使用するのが好きです。JavaScriptにin_arrayブール値を直接返す関数(PHPと同様)があればいいのにと思っていますが、それはあくまでも希望的なものです(更新:現在はそうです。と呼ばれていincludesます。上記参照)。jQueryはinArray、PHPのメソッドシグネチャを共有しながら、実際にはネイティブindexOf機能を模倣していることに注意してください(これは、インデックスが本当に必要な場合に、さまざまなケースで役立ちます)。
重要な注意:ティルデショートカットを使用すると、コードが十分に明確ではなく、すべての犠牲を払って回避すべきであると激しく信じているため、論争の渦中になっているようです(この回答のコメントを参照)。あなたが彼らの感情を共有するなら、あなたは.indexOf(...) >= 0解決策に固執するべきです。
もう少し長い説明:
JavaScriptの整数は符号付きです。つまり、左端のビットは符号ビットとして予約されています。数値が正であるか負であるかを示すフラグ1。
32ビットのバイナリ形式の正の数の例を次に示します。
1 : 00000000000000000000000000000001
2 : 00000000000000000000000000000010
3 : 00000000000000000000000000000011
15: 00000000000000000000000000001111
ここに同じ数字がありますが、負です:
-1 : 11111111111111111111111111111111
-2 : 11111111111111111111111111111110
-3 : 11111111111111111111111111111101
-15: 11111111111111111111111111110001
なぜ負の数のこのような奇妙な組み合わせですか?シンプル。負の数は正の数の逆数+ 1です。負の数を正の数に加算すると、常にが生成され0ます。
これを理解するために、簡単な2進算術を実行してみましょう。
以下に追加-1する方法を示します+1。
00000000000000000000000000000001 +1
+ 11111111111111111111111111111111 -1
-------------------------------------------
= 00000000000000000000000000000000 0
そして、これは私たちがどのように追加-15するか+15です:
00000000000000000000000000001111 +15
+ 11111111111111111111111111110001 -15
--------------------------------------------
= 00000000000000000000000000000000 0
どのようにしてそれらの結果を得るのですか?定期的に足し算を行うことで、学校で教えられたように、一番右の列から始めて、すべての行を足します。合計が最大の1桁の数値(10進数では9ですが、2進数では1)より大きい場合、残りを次の列に繰り越します。
ここで、お気づきのように、負の数を正の数に追加すると、すべて0のであるとは限らない右端の列には常に2つ1のがあり、合計するとになり2ます。2のバイナリ表現はなので、次の列10にを運び、結果の1a 0を最初の列に入れます。左にある他のすべての列には、行が1つだけある1ため、1前の列から繰り越された値は再び合計され2、次に繰り越されます...このプロセスは、左端の列に到達するまで繰り返されます。1引き継がれるために、それがオーバーフローすると失われるので、行き場がない、と私たちはを残している0すべてにわたって秒。
このシステムは2の補数と呼ばれます。あなたはここでこれについてもっと読むことができます:
符号付き整数の2の補数表現。
2の補数のクラッシュコース-1が終了したので、2進数表現が1全体に渡る唯一の数値であることがわかります。
~ビット単位のNOT演算子を使用すると、指定された数値のすべてのビットが反転されます。0すべてのビットを反転させることから戻る唯一の方法は、すべてので始めた場合1です。
だから、このすべてはそれが言っての長ったらしい方法だった~nだけ返され0た場合nです-1。
inますか?