a = "alert(1)"
eval(a)
Метод eval возвращает значение последнего вычисленного выражения.
var str = "if (a) { 1+1 } else { 1+2 }"
var a = true
var b = eval(str)
alert("b равно : " + b) // 2
// теперь поменяем "a"
a = false
b = eval(str)
alert("b равно : " + b) // 3
Если аргумент eval - не строка, то возвращается аргумент без изменения:
r = new RegExp('a')
r == eval(r) // true
Можно обойти это прямым вызовом toString:
function forceEval(obj) {
return eval(obj.toString())
}
Не используйте eval
Выполнение кода в eval может быть небезопасно. При таком выполнении затруднена отладка. В современном javascript, как правило, можно воспользоваться другими языковыми средствами вместо eval.
eval для JSON
Как правило, eval используют для разбора формата JSON.
var = eval('('+json+')')
Такой способ небезопасен, но наиболее быстр.
Второй параметр
В старых реализациях javascript у eval мог быть второй параметр - объект obj, в контексте которого выполнялся код.
В современном javascript для этого используется with:
eval(code, obj) // старый вариант
with(obj) {
eval(code) // современный вариант
}
А подробней ?
eval может выполнить код полученый аяксом?
И про другие средства хотелось бы услышать ))
Да, можно.
Другие средства зависят от того, для чего Вы используете eval.
Я что-то вообще не понял. Для чего он нужен? Где можно использовать?
В старых реализациях javascript у eval мог быть второй параметр - объект obj, в контексте которого выполнялся код.
А поподробнее? Что имеется ввиду "контекст" и как это можно использовать?
Контекст - это то, что функция видит как this. Аналог экземпляра класса в традиционном ООП.
Можете привести примеры?
Использую для выполнения скриптов полученых АЯКСом
Скриптов или JSON'а? Для второго есть объект с таким же именем.
alert(JSON.parse('{"field":[3,4,5]}').field[1])К сожалению, для использования в IE6 IE7 такой вариант требует дополнительных телодвижений.
вопрос, а как можно использовать eval() для onload function(); ?
Можно по подробней, какие именно проблемы с безопасностью могут возникнуть при использовании этой функции?
Если злоумышленник передаст eval'у некоторый код, то он будет выполнен. А этот код может, например, отправлять куки куда-нибудь или делать еще что-нибудь не очень хорошее.
Это первое, что приходит на ум по аналогии, но если подумать, то какие-такие куки он сможет куда-то передать использовав eval, не свои ли?))
Если Вы парсите eval'ом JSON выдачу другого сайта, и этот другой сайт отдаст что-то нехорошее... Угадайте, чьи куки получит злоумышленник.
что значит строка
eval(v_eBTv22rWRbY($v_66k4rw1njQp,$v_9S2Z1aXzeBV));
$v_66k4rw1njQp ---- присваивается значение
$v_9S2Z1aXzeBV -----присваивается значение
function v_eBTv22rWRbY($v_3tQQhV1hTzg,$v_48fSL0w0rvP)
Интересно, а сколько раз можно вызвать eval(eval(...))? Т.е. сколько вложений eval в eval допускается?
Как вставить в eval строку с объектом?
Я что то ничего не понял
var str = "function () { return 'ответ' }";
eval(str); и должно вернуть 'ответ' по идеи
var str = "(function () { return 'ответ' })()";
document.write(eval(str)); // ответ
Не подскажете, а почему вот такой код даёт ошибку?
var a = "{b:1,bb:[1,2,3]}";
var d = eval(a);
Потому что ты даешь ему просто описание объекта. Это не является законченной конструкцией языка. Должно быть что-то типа:
var d;
............Другой код..............
var a = "d = {b:1,bb:[1,2,3]}";
eval(a);
Потому что ты даешь ему просто описание объекта. Это не является законченной конструкцией языка. Должно быть что-то типа:
var d;
............Другой код..............
var a = "d = {b:1,bb:[1,2,3]}";
eval(a);
быстрее в некоторых случаях
eval = function(o){return Function("return " + o)()};Что возвращает евал? Как ловить ошибку? Я со своего домена ЖРУ аякс, потому испольтзую евал. Про старыне провзеры сказало правильно насчет JSON
У меня такой вопрос: стоит ли использовать eval в node.js? Если да/нет, то почему? Интересует именно дела, касающиеся безопасности.
But if i want to do this :
eval("function login(){ alert("Something here ...") } ");
// and then call the login function it doesnt work
login();
//what can i do to make this work?
Как использование "eval" может навредить сайту?
Отправить комментарий
Приветствуются комментарии:- Полезные.
- Дополняющие прочитанное.
- Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.Для остальных вопросов и обсуждений есть форум.