@Mauricioがコメントしたように(![]+[])[+[]]、「f」(「false」の最初の文字)、(![]+[])[+!+[]])「a」などです...
どのように機能しますか?
最初の文字「f」を見てみましょう:
(![]+[])[+[]]; // 'f'
式の最初の部分(括弧の間)はで構成され![]+[]、加算演算子の最初のオペランドはで![]ありfalse、配列オブジェクトは他のオブジェクトインスタンスと同様に真実であり、論理(!)NOT単項を適用するため、演算子、falseたとえば値を生成します。
![]; // false, it was truthy
!{}; // false, it was truthy
!0; // true, it was falsey
!NaN; // true, it was falsey
その後に、追加の2番目のオペランドである空の配列があります[]。これは、false値を文字列に変換するためだけに作成されます。
false+[]; // "false"
false+''; // "false"
最後の部分、括弧の後の角括弧のペア、それらはプロパティアクセサーであり、空の配列に再度適用された単項プラス演算子によって形成される式を受け取ります。
単項プラス演算子が行うことはNumber、たとえばへの型変換です。
typeof +"20"; // "number"
もう一度、これは空の配列に適用され、前に述べたように、配列の文字列表現は空の文字列であり、空の文字列を数値に変換すると、ゼロに変換されます。
+[]; // 0, because
+[].toString(); // 0, because
+""; // 0
したがって、いくつかの手順で式を「デコード」できます。
(![]+[])[+[]];
(false+[])[+[]];
(false+'')[+[]];
(false+'')[0];
('false')[0]; // "f"
文字列値にブラケット表記を使用して文字にアクセスすることは、ECMAScript 3rdの一部ではないことに注意してください。エディションの仕様(それがcharAtメソッドが存在した理由です)。
ただし、文字列の文字を表すこの種の「インデックスプロパティ」はECMAScript 5で標準化されており、標準化される前でも、この機能は多くのブラウザーで使用できました(IE8(標準モード)でも)。