このコードはひどいです。他に言葉はありません。難読化ツールの結果のようです。このコードがどのように機能するかを知りたいと思っていることは理解していますが、難読化されたコードの要点は、それを解決することが不可能であるか、非常に困難であるということです。
ただし、すべてのオペレーターが何であるか、および彼らが何をするかを知ることは、IMO を開始するのに最適な場所です。さまざまな種類の演算子の完全なリファレンスは、MDN のここにあります。
まず、ビット単位の演算子:は、または
k & 3
を返します。なんで?左オペランドと右オペランドの両方が「共有」する一連のビットを返すため、次のことを考慮してください。0
1
3
&
| integer | binary |
====================
| 1 | 0001 |
| 2 | 0010 |
| 3 | 0011 |
| 4 | 0100 |
--------------------
次に、両方のオペランドで最初のビットのみが「オン」1 & 3
であるため、が等しいのは理にかなっています ( )。
スニペットが使用するもう 1 つのビット演算子は、のような式で単一のパイプ:です。上記の表を念頭に置いてください:は3 で解決され、3 を返します。結果の値が に割り当てられる場合、それが代入演算子の目的です。したがって、が 1 の場合は3 に設定され、が 2 または 3 の場合は何も変更されません。1
000>1< & 001>1<
|
b |= 2
1 | 2
1 | 3
OR
1
1
b |= 2
b
b
b
b
それ以外には、ネストされた三項の ( x ? a : b
) がたくさんあり、完全に書くと次のようになります。
if (x)//truthy
{
a;
}
else
{
b;
}
最後に、あなたを最もk & 3 ||...
驚かせたのは、最初の論理演算子です。は||
単なる論理orです。左オペランドの結果の値に応じて、その左オペランドまたは右オペランドのいずれかが使用されます。繰り返しますが、これは次の略です。
if (k & 3)
{//will be true if either the first, second or both the second and first bits are set on k
k & 3;
}
else
{//if k is 4, for example
all the other stuff
}
少し時間をかけて MDN リファレンスを参照し、さまざまなオペレーターについて理解してください。それらを理解すると、それは正規表現について知るようなものです: 広大で刺激的な可能性の領域が展開され、以前は非常に多くのコード行を必要としたものが、たった 1 つの演算子を使用して突然記述できるようになります。