私は SocketIO ソース コードを見ていますが、次のステートメントがあります。
if (-~manager.get('blacklist').indexOf(packet.name)) {
-~
ここでの速記とはどういう意味ですか?
私は SocketIO ソース コードを見ていますが、次のステートメントがあります。
if (-~manager.get('blacklist').indexOf(packet.name)) {
-~
ここでの速記とはどういう意味ですか?
これは、次のトリックのようです。
if(manager.get('blacklist').indexOf(packet.name) !== -1)
他の人が述べたように~
、2進数を反転するビット単位の否定です。たとえば、または 16 進数では になり00000001
ます。11111110
0x01
0xFE
-1
すべてのビット演算子が返すもの ( >>>
unsigned int 32 を返すものを除く) である signed int 32 は、16 進数で として表され0xFFFFFFFF
ます。~(-1)
ビットを反転して、結果は0x00000000
which isになり0
ます。
マイナスは単純に数字を否定します。zzzBov が述べたように、この場合は何もしません。
-~(-1) === 0
と
~(-1) === 0
コードは次のように変更できます。
if(~manager.get('blacklist').indexOf(packet.name))
しかし、私の意見では、文字はそれほど重要ではないので、おそらくもう少し読みやすい長いバージョンの方が良いか、contains メソッドを実装する方がさらに良いでしょう。このバージョンは JavaScript コンパイラに任せるのが最善です。またはコンプレッサーを使用して、この最適化を実行します。
ビットごとの反転。
~0 == 0xFFFFFFFF == -1
~1 == 0xFFFFFFFE
マイナスは算術反転です。したがって、indexOf が失敗した場合、結果は 0 になります (-1 を返します)。
2 つの演算子は省略形ではありません。~
はビットごとの否定であり、-
標準の否定です。
~foo.indexOf(bar)
の一般的な省略形ですfoo.contains(bar)
。結果はif
ステートメントで使用されるため、-
直後の記号はまったく役に立たず、何の意味もありません。
-~
1
together は、数値に加算する手段です。数字の使用が許可されていないコード ゴルフで競技している場合を除き+ 1
、一般的には役に立ちません。1