Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Задачка на смекалку (https://javascript.ru/forum/misc/11431-zadachka-na-smekalku.html)

Kolyaj 30.08.2010 15:56

Цитата:

Сообщение от Skipp
А ещё задачки будут?

Ну например
alert(obj.foo);  // 5
delete obj.foo;
alert(obj.foo);  // 5
Определить obj.

Octane 30.08.2010 15:59

function Obj() {}
Obj.prototype.foo = 5;
var obj = new Obj;
alert(obj.foo);
delete obj.foo;
alert(obj.foo);

B~Vladi 30.08.2010 16:28

Хм... И правда...

Octane 30.08.2010 18:52

Кстати, случайно пришло в голову проверить, оказывается [].toString и [].join не проверяют hasOwnProperty:

Array.prototype[0] = "O_o";
alert([,1,2]);

Kolyaj 30.08.2010 18:56

Ни один метод массива не проверяет hasOwnProperty.

subzey 04.09.2010 16:37

Задача #4:
Надеюсь, хоть она продержится более пары часов :)
foo = foo + "";
!!~eval(foo + " / -.5"); /* true */

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


Чуть не забыл. eval не переопределять :)

Gvozd 05.09.2010 12:30

весь мозг вынес.
самые разные идеи опробовал
подозреваю, что мое решение не то, что ты ожидаешь увидеть, но все же
var foo=' foo=" + 0.5 " , 1 '
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

subzey 05.09.2010 13:02

Gvozd,
Ну, коль скоро оно выполняется, то верно :)

Если до завтра не поступит других вариантов, напишу мой вариант.

Gvozd 05.09.2010 13:16

Цитата:

Сообщение от subzey
Ну, коль скоро оно выполняется, то верно

да.
но все же мое решение, как если бы на задачу "вывести первых 10 натуральных чисел", я бы написал
alert(1);
alert(2);
alert(3);
alert(4);
alert(5);
alert(6);
alert(7);
alert(8);
alert(9);
alert(10);

subzey 06.09.2010 10:47

#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]


Часовой пояс GMT +3, время: 11:08.