Конвертация Javascript кода в PHP

Рейтинг: 1Ответов: 1Опубликовано: 07.01.2015

Здравствуйте! Есть JS-код:

GgX=((!+[]+!![]+[])+(+[]))+((!+[]+!![]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]));
GgX*=+((+!![]+[])+(+!![])); 
GgX-=+((+!![]+[])+(!+[]+!![]+!![]));
abb = parseInt(GgX, 10)+10;
alert(abb);

22503 - результат

Нужно переписать его на php. Подскажите:

  1. Что за "[]" и что вообще выполняет данный код, желательно по шагам или описание операций.
  2. Аналог parseInt в php.
  3. Есть ли какой-либо php-скрипт/эмулятор, позволяющий выполнять подобный javascript код именно на стороне сервера?

Спасибо!

Ответы

▲ 3

@Murky, для того, чтобы выполнить JavaScript из PHP вам понадобится установит на сервере соответствующий модуль, например, v8js.

@Angus123, решение "задачки для первоклассников" станет очевидным, если вспомнить, что JavaScript - динамически типизированный язык, и при попытке совершить над объектом действие, которое к этому объекту неприменимо, JavaScript попытается привести этот объект к подходящему типу. В частности операция "унарный плюс" неприменима к массивам, зато применима к числам. Пустой массив JavaScript приведёт к 0, массив с одним числом - к этому числу, массив, содержащий больше одного элемента - к NaN. Таким образом, выражение +[] приводится к 0. Логическое отрицание неприменимо к числам, поэтому JavaScript осуществляет конвертацию 0 -> false. Таким образом, выражение !+[] = true. Аналогичным образом !![] = true. Бинарное сложение к булевским значениям неприменимо, поэтому они конвертируются обратно в числа: !+[]+!![] = true + true = 1 + 1 = 2. Зная о подобных преобразованиях, легко вычислить значение представленного выражения.