Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как тип String переделать в js код? (https://javascript.ru/forum/misc/24249-kak-tip-string-peredelat-v-js-kod.html)

9xakep 22.12.2011 19:13

Как тип String переделать в js код?
 
Извиняюсь если не так выразился, но задача такого рода: если допустим переменная: var a = "function a() { alert('hello world') }" Можно ли ее в js коде оформить как код?
<script>
function a() {
var a = 'function a() { alert('hello world') }' //сделать это не переменной, а кодом?
}
</script>

devote 22.12.2011 19:14

eval()

9xakep 22.12.2011 19:28

<script>
var a = "function a() { alert('hello world') }"
eval(a)
a()
</script>

Спасибо, разобрался =)

9xakep 22.12.2011 20:11

<script>
function getFuncTime(funct) {
var _function = funct
eval(funct) //получили ф-ию в коде
var reg = _function.match(/function\s(\w*\(\))/) //изъяли оттуда имя ф-ии, лежит в reg[1]
console.time('time')
reg[1] //запускаем ф-ию
console.timeEnd('time')
}
getFuncTime("function a() { for(i=0;i<1000;i++) {} }")
</script>

Хотел сделать такую ф-ию, которая показывала бы за какое время исполняется та или иная ф-ия. Все не могу понять почему в консоли работа цикла показывается за time: 0ms (20µsec), где я ошибся? Все свои мысли оставил в комментариях в коде...

trikadin 22.12.2011 21:52

9xakep, имя функции можно получить через св-во name. Во-первых. А во-вторых, у вас какой-то странный ход мыслей... Функция-то может быть и безымянной.

9xakep 22.12.2011 22:05

1)ну name я и так получил) (умный в гору не пойдет, умный гору обойдет..ага...)
2)мне пока это сделать бы, я в идеале хотел вообще так: getFucTime(function_name(), alert/console/text) Последнее: через что отобразить. А в чем ошибка-то собственно говоря?

trikadin 22.12.2011 22:50

function getFunctionRunTime(func){
 t1= +(new Date());
 func();
 console.log(+(new Date()) - t1);
};


UPD: поправил скобку, была опечатка.

Nekromancer 22.12.2011 23:57

9xakep,
я вообще в вашем коде цикла не увидел, вы о чём? И вообще, если запускать reg[1], то наверно так уж - eval(reg[1])();

9xakep 23.12.2011 08:18

Цитата:

Сообщение от trikadin (Сообщение 145400)
function getFunctionRunTime(func){
 t1= +(new Date()};
 func();
 console.log(+(new Date()) - t1);
};

Так просто оказвыается, я думал надо будет брать ф-ию(искать ее каким либо образом в коде) приводить к String, и дальше все как у меня. :haha:
"t1= +(new Date()};" Опечатка или тут эта скобка нужна?
Цитата:

Сообщение от Nekromancer (Сообщение 145408)
9xakep,
я вообще в вашем коде цикла не увидел, вы о чём? И вообще, если запускать reg[1], то наверно так уж - eval(reg[1])();

Спасибо, вот этот код вроде как работает:
<script>
function getFuncTime(funct) {
var _function = funct
var reg = _function.match(/function\s(\w*)/) //изъяли оттуда имя ф-ии, в нашем случае a
console.time('time')
eval(funct)
eval(reg[1])()
console.timeEnd('time')
}
getFuncTime("function a() { var m = [1,2,2,22]; for(var i=0;i<m.length;i++) { m[i] }  }")
</script>

m4gz 23.12.2011 08:59

Eval как и в пхп, только ее считают небезопасной, мол слишком много свободы для непредсказуемой строки, незнаю в чем тут логика, если твой код и твой евал обрабатывает строго регламентированную функцию, где опасность?

Aetae 23.12.2011 09:47

Цитата:

Сообщение от m4gz (Сообщение 145442)
незнаю в чем тут логика, если твой код и твой евал обрабатывает строго регламентированную функцию, где опасность?

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

devote 23.12.2011 16:34

Цитата:

Сообщение от Aetae
Если строго регламентированную - никакой, а вот если включает кусок данных полученных от другого пользователя...

Для яваскрипта не вижу пробела в безопасности. Ну подумаешь откроется другое окно или еще мелочь какая нить... А вот для пхп, да есть опасность навредить.

Nekromancer 23.12.2011 17:27

devote,
Да, подумаешь, куки стырят, фигня.

trikadin 23.12.2011 19:25

Цитата:

Сообщение от Nekromancer
Да, подумаешь, куки стырят, фигня.

:D

devote 23.12.2011 19:31

Цитата:

Сообщение от Nekromancer
Да, подумаешь, куки стырят, фигня.

Главное сервак не повалят =)

9xakep 23.12.2011 19:45

Цитата:

Сообщение от devote (Сообщение 145541)
Главное сервак не повалят =)

гыг...:D А на пользователей пофиг, что у них пароль стырили)

devote 23.12.2011 19:56

Цитата:

Сообщение от 9xakep
А на пользователей пофиг, что у них пароль стырили)

Сами виноваты, если у них что-то тырят... От всего все равно не защитишься, а особенно от неизлечимого и не удаляемого вируса, это я про юзеров.

trikadin 23.12.2011 20:17

Цитата:

Сообщение от devote
Сами виноваты, если у них что-то тырят... От всего все равно не защитишься, а особенно от неизлечимого и не удаляемого вируса, это я про юзеров.

Это не значит, что не стоит попробовать)

devote 23.12.2011 20:23

Цитата:

Сообщение от trikadin
Это не значит, что не стоит попробовать)

О да, не спорю... лично я уже замучился наполнять свой блокнот тем что творят хомячки, порой такие вещи творят что сам никогда не додумаешь. В JS есть огромный минус.. Он доступен с компа хомячков, а значит если хомячок цапнул вирус, то никакой ваш способ защиты не поможет если атака идет с компа хомячка. Вот именно это и есть большая проблема, и куки стырить может любой вирус, даже не влезая в код JS.

trikadin 23.12.2011 20:26

devote, не спорю) Только это уже другой вопрос...


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