Показать сообщение отдельно
  #30 (permalink)  
Старый 06.09.2010, 10:47
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

#4: Разгадка
[spoiler]
var foo = "-~/ ";

foo = foo + "";
alert( !!~eval(foo + " / -.5") ); /* true */

alert( eval(                  foo + "+" + foo                  ) ) /* 1 */
alert( eval(            foo + foo + "+" + foo + foo            ) ) /* 2 */
alert( eval(      foo + foo + foo + "+" + foo + foo + foo      ) ) /* 3 */
alert( eval(foo + foo + foo + foo + "+" + foo + foo + foo + foo) ) /* 4 */
// и так далее

/* поясню */

!!~(-~/  / -.5);
/* тут слеш служит «закрывающей скобкой» регулярки, а минус при таком раскладе уже не унарный оператор */

-~/ +-~/;
/* тут опять регулярное выражение, причем, в него входит +. При приведении к числу оно вполне себе NaN.
-~NaN = 1 */

-~/ -~/ +-~/ -~/;
/* когда таких кусков слева и справа четное количество, плюс работает как просто плюс. В принципе, всю задачу можно было сделать и без плюса, но как не запутать мозг уважаемым js-девелоперам? :) */

[/spoiler]
Ответить с цитированием