私はこれをcoffeescriptの小さな本で見つけました
!!~ string.indexOf "test"
そして私はテストします
~-1 == 0
~0 == -1
~3 == -4
~-2 == 1
では、ここで正確に何が起こっていて、なぜ が返さ~
れる0
のか、生成される値は だけなのでしょうか?-1
-1
0
私はこれをcoffeescriptの小さな本で見つけました
!!~ string.indexOf "test"
そして私はテストします
~-1 == 0
~0 == -1
~3 == -4
~-2 == 1
では、ここで正確に何が起こっていて、なぜ が返さ~
れる0
のか、生成される値は だけなのでしょうか?-1
-1
0
2の補数の整数では、-1 はすべて 1 ビットのシーケンスです。~
ビット演算子:
オペランドのビットを反転します。
1 ビットのシーケンスのビットを反転すると、0 ビットのシーケンスが得られ、0 ビットのシーケンスは整数 0 に~i
なりi === -1
ます。
[...] 値が見つからない場合は -1 を返します
これら 2 つのことをまとめると、次のことがわかります。
~ string.indexOf "test"
"test"
がに存在しない場合に限り、ゼロですstring
。次に、!!
「ブール値にキャストする」というトリックと、それ0
が JavaScript で falsey である唯一の整数であるという事実を追加すると、次のようになります。
!!~ string.indexOf "test"
およびそうでないtrue
場合"test"
に表示されます。または、賢明で読みやすいコードでは、次と同じです。string
false
string.indexOf("test") != -1
本が実際にそのようなコードを書くことを示唆している場合は、その本を燃やして、より良い本を見つける必要があります. ちょっとしたいじりをすべて使用することは、コードを維持しているすべての人があなたを嫌うような「賢さ」にすぎません。