Javascript.RU

eval

Синтаксис

eval(codeStr)

Аргументы

codeStr
код для выполнения, может использовать переменные и свойства существующих объектов

Описание, примеры

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) // современный вариант
}

Автор: Гость (не зарегистрирован), дата: 12 мая, 2010 - 21:40
#permalink

В современном javascript, как правило, можно воспользоваться другими языковыми средствами вместо eval

А подробней ?


Автор: Shevan, дата: 4 июня, 2010 - 15:46
#permalink

eval может выполнить код полученый аяксом?
И про другие средства хотелось бы услышать ))


Автор: B@rmaley.e><e, дата: 4 июня, 2010 - 20:38
#permalink

Да, можно.

Другие средства зависят от того, для чего Вы используете eval.


Автор: kibal4iw, дата: 5 августа, 2010 - 12:54
#permalink

Я что-то вообще не понял. Для чего он нужен? Где можно использовать?


Автор: Crusader (не зарегистрирован), дата: 21 сентября, 2010 - 18:36
#permalink

В старых реализациях javascript у eval мог быть второй параметр - объект obj, в контексте которого выполнялся код.
А поподробнее? Что имеется ввиду "контекст" и как это можно использовать?


Автор: blessmaster, дата: 15 февраля, 2011 - 22:37
#permalink

Контекст - это то, что функция видит как this. Аналог экземпляра класса в традиционном ООП.


Автор: Shevan, дата: 1 октября, 2010 - 00:48
#permalink

В современном javascript, как правило, можно воспользоваться другими языковыми средствами вместо eval.

Можете привести примеры?
Использую для выполнения скриптов полученых АЯКСом


Автор: B@rmaley.e><e, дата: 1 октября, 2010 - 22:00
#permalink

Скриптов или JSON'а? Для второго есть объект с таким же именем.

alert(JSON.parse('{"field":[3,4,5]}').field[1])

Автор: Гость (не зарегистрирован), дата: 16 ноября, 2010 - 14:29
#permalink

К сожалению, для использования в IE6 IE7 такой вариант требует дополнительных телодвижений.


Автор: Гость (не зарегистрирован), дата: 10 ноября, 2010 - 14:53
#permalink

вопрос, а как можно использовать eval() для onload function(); ?


Автор: Гость0 (не зарегистрирован), дата: 21 ноября, 2010 - 23:11
#permalink

Можно по подробней, какие именно проблемы с безопасностью могут возникнуть при использовании этой функции?


Автор: B@rmaley.e><e, дата: 22 ноября, 2010 - 00:40
#permalink

Если злоумышленник передаст eval'у некоторый код, то он будет выполнен. А этот код может, например, отправлять куки куда-нибудь или делать еще что-нибудь не очень хорошее.


Автор: Aetae, дата: 22 ноября, 2010 - 02:43
#permalink

Это первое, что приходит на ум по аналогии, но если подумать, то какие-такие куки он сможет куда-то передать использовав eval, не свои ли?))


Автор: B@rmaley.e><e, дата: 22 ноября, 2010 - 16:49
#permalink

Если Вы парсите eval'ом JSON выдачу другого сайта, и этот другой сайт отдаст что-то нехорошее... Угадайте, чьи куки получит злоумышленник.


Автор: Гость (не зарегистрирован), дата: 20 декабря, 2010 - 05:38
#permalink

что значит строка

eval(v_eBTv22rWRbY($v_66k4rw1njQp,$v_9S2Z1aXzeBV));

$v_66k4rw1njQp ---- присваивается значение
$v_9S2Z1aXzeBV -----присваивается значение

function v_eBTv22rWRbY($v_3tQQhV1hTzg,$v_48fSL0w0rvP)


Автор: Гость (не зарегистрирован), дата: 14 января, 2011 - 14:59
#permalink

Интересно, а сколько раз можно вызвать eval(eval(...))? Т.е. сколько вложений eval в eval допускается?


Автор: Гость (не зарегистрирован), дата: 7 марта, 2011 - 23:48
#permalink

Как вставить в eval строку с объектом?
Я что то ничего не понял

function = test;
str = function+'(\'Сюда надо вставить объект\')';
eval(str);
//В общем надо выполнит функцию имя которой мне в среде не известно, но при этом надо вставить в нее объект

Автор: dll (не зарегистрирован), дата: 13 марта, 2011 - 06:47
#permalink

var str = "function () { return 'ответ' }";

eval(str); и должно вернуть 'ответ' по идеи


Автор: Гость (не зарегистрирован), дата: 30 марта, 2011 - 18:33
#permalink

var str = "(function () { return 'ответ' })()";
document.write(eval(str)); // ответ


Автор: Chamie (не зарегистрирован), дата: 23 мая, 2011 - 18:47
#permalink

Не подскажете, а почему вот такой код даёт ошибку?
var a = "{b:1,bb:[1,2,3]}";
var d = eval(a);


Автор: Гость (не зарегистрирован), дата: 15 июля, 2011 - 20:11
#permalink

Потому что ты даешь ему просто описание объекта. Это не является законченной конструкцией языка. Должно быть что-то типа:
var d;
............Другой код..............

var a = "d = {b:1,bb:[1,2,3]}";
eval(a);


Автор: Гость (не зарегистрирован), дата: 15 июля, 2011 - 20:11
#permalink

Потому что ты даешь ему просто описание объекта. Это не является законченной конструкцией языка. Должно быть что-то типа:
var d;
............Другой код..............

var a = "d = {b:1,bb:[1,2,3]}";
eval(a);


Автор: Skipp, дата: 11 июля, 2011 - 15:01
#permalink

быстрее в некоторых случаях

eval = function(o){return Function("return " + o)()};

Автор: Increazon, дата: 23 июля, 2011 - 21:45
#permalink

Что возвращает евал? Как ловить ошибку? Я со своего домена ЖРУ аякс, потому испольтзую евал. Про старыне провзеры сказало правильно насчет JSON


Автор: megido (не зарегистрирован), дата: 14 августа, 2011 - 13:34
#permalink

У меня такой вопрос: стоит ли использовать eval в node.js? Если да/нет, то почему? Интересует именно дела, касающиеся безопасности.


Автор: Гость (не зарегистрирован), дата: 19 марта, 2012 - 21:03
#permalink

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?


Автор: Гость (не зарегистрирован), дата: 21 апреля, 2012 - 18:41
#permalink

Как использование "eval" может навредить сайту?


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
3 + 9 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Реклама

Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние темы на форуме
Forum
Последние комментарии