Як @Mauricio прокоментував (![]+[])[+[]]це "f" (перший знак "false"), (![]+[])[+!+[]])це "a" тощо.
Як це працює?
Розглянемо перший символ, 'f':
(![]+[])[+[]]; // 'f'
Перша частина виразу - між дужками - складається з ![]+[], перший операнд оператора Addition є, ![]і він буде виробляти false, тому що об’єкт масиву - як і будь-який інший екземпляр Object - є truthy і застосовує логічний (!) НЕ одинаковий оператора, він виробляє значення false, наприклад.
![]; // false, it was truthy
!{}; // false, it was truthy
!0; // true, it was falsey
!NaN; // true, it was falsey
Після цього у нас є другий операнд доповнення, порожній масив. []Це зроблено просто для перетворення falseзначення в String, тому що рядкове представлення порожнього масиву є просто порожнім рядком, еквівалентне:
false+[]; // "false"
false+''; // "false"
Остання частина, пара квадратних дужок після дужок, вони є аксесуаром власності, і вони отримують вираз, який формується оператором Unary Plus, застосованим знову до порожнього масиву.
Оператор Unary Plus - це перетворення типу Number, наприклад:
typeof +"20"; // "number"
Ще раз це застосовується до порожнього масиву, і, як я вже говорив раніше, рядкове представлення масиву є порожнім рядком, і коли ви перетворюєте порожній рядок у число, він перетворюється на нуль:
+[]; // 0, because
+[].toString(); // 0, because
+""; // 0
Тому ми можемо "розшифрувати" вираз у кілька кроків:
(![]+[])[+[]];
(false+[])[+[]];
(false+'')[+[]];
(false+'')[0];
('false')[0]; // "f"
Зауважте, що доступ до символів за допомогою позначення дужок на значеннях String не був частиною ECMAScript 3rd. Специфікація видання (саме тому charAtметод існував).
Однак подібні "властивості індексу", які представляють символи рядка, були стандартизовані в ECMAScript 5, і ще до стандартизації функція була доступна у великій кількості браузерів (навіть в IE8 (стандартний режим)).