Магия JavaScript

Магия JavaScript

WebDEV

Не секрет, что из-за того, что в JavaScript'е нету строгой типизации, из-за этого могут происходить странные вещи.

Магия JavaScript

Если мы прибавляем строку к чему-то, результат будет конвертирован в строку.

Если мы припишем слева от чего-то плюс или минус, будет произведена попытка конвертации строки в число.

Если на что-то навесить логическое отрицание, результат будет представлен как логическая величина.

Мы можем использовать это и творить магию, используя лишь эти символы: []()! и +.


Пример магии вне Хогвартса


Вот так можно получить букву a:

![] === false
![]+[] === "false"
+!![] === 1
------------------------
(![]+[])[+!![]] === "a"  // "false"[1]



Таким образом можно получить все буквы из слов true и false.  Такими буквами даже можно писать код! Чтоб писать код нам нужно больше букв.. Откуда их брать?

Ну, ещё есть undefined, который и можно получить, сделав что-то глупое, как [][[]]

Используя все эти буквы, можно составить слова fillfilter и find. Конечно, есть и другие доступные слова, но ценностью именно этих слов является то, что они — методы массивов. Это означает, что они являются частью объекта Array и их можно вызывать прямо для массивов-сущностей. Например, [2,1].sort().

Кроме того, нужно помнить, что свойства объекта в JS можно использовать как через точку, так и через квадратные скобки. Поскольку методы массива — это свойства объекта Array, мы можем вызывать их, используя скобки вместо точки.

То есть [2,1]["sort"]() — это то же самое, что и [2,1].sort().


Буквы f, i, и l мы получили выше


И получим новые символы: cov(){[]} .

Так можно получить все буквы алфавита. Вот полный список букв и символов.


Существует инструмент, который может конвертировать нормальный код в "магический". Называется JSFuck.

Я составил небольшое послание, кто первый расшифрует получит ничего.


Report Page