ここのjQuery inArray
ページのコメントを読むと、興味深い宣言があります。
!!~jQuery.inArray(elm, arr)
今、私は二重感嘆符が結果をtype boolean
に、の値で変換すると信じていますtrue
。私が理解していないのは~
、これらすべての中でチルダ()演算子がどのように使用されているのですか?
var arr = ["one", "two", "three"];
if (jQuery.inArray("one", arr) > -1) { alert("Found"); }
if
ステートメントのリファクタリング:
if (!!~jQuery.inArray("one", arr)) { alert("Found"); }
壊す:
jQuery.inArray("one", arr) // 0
~jQuery.inArray("one", arr) // -1 (why?)
!~jQuery.inArray("one", arr) // false
!!~jQuery.inArray("one", arr) // true
また、チルダを前に置くと結果がになることにも気付きました-2
。
~!!~jQuery.inArray("one", arr) // -2
ここではチルダの目的がわかりません。誰かがそれを説明したり、リソースに私を向けたりできますか?
~jQuery.inArray()
実際には非常に便利です-おそらく検索関数-1
が失敗して戻る非常に良い理由です(2の補数が偽である唯一の値)。トリックを見たり理解したりすると、それよりも読みやすくなり!= -1
ます。
!!~
ているなんて信じられません。
if (x != -1)
とif (~x)
私との主な違いは、前者は実際にあなたがやろうとしていることを表現しているということです。後者はあなたが完全に別のことをしたいことを表しています(「64ビットの数値を32ビットの整数に変換し、その整数のビットごとのNOTが真実かどうかを確認してください」)、あなたはたまたまこれで望ましい結果を得ます1つのケース。