私は 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ます。111111100x010xFE
-1すべてのビット演算子が返すもの ( >>>unsigned int 32 を返すものを除く) である signed int 32 は、16 進数で として表され0xFFFFFFFFます。~(-1)ビットを反転して、結果は0x00000000which 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ステートメントで使用されるため、-直後の記号はまったく役に立たず、何の意味もありません。
-~1together は、数値に加算する手段です。数字の使用が許可されていないコード ゴルフで競技している場合を除き+ 1、一般的には役に立ちません。1