В JavaScript есть много маленьких хитростей, упрощающих программирование. Одной из них является функция eval(), которая рассматривает строку как выражение JavaScript и выполняет ее. Ниже приводится ее описание.
Функция функции Eval: сначала интерпретируйте код Javascript, а затем выполните его. Использование: Eval(codeString).
codeString — это строка, содержащая инструкции Javascript, скомпилированная с использованием механизма Javascript после eval.
Небольшой пример:
var the_unevaled_answer = "2 + 3";
var the_evaled_answer = eval("2 + 3");
alert("неоцененный ответ: " + the_unevaled_answer + ", а оцененный ответ: " + the_evaled_answer);
Если вы запустите эту программу оценки, вы увидите, что в JavaScript строка "2 + 3" фактически выполняется. Поэтому, когда вы устанавливаете значение the_evaled_answer равным eval("2 + 3"), JavaScript поймет и вернет сумму 2 и 3 в the_evaled_answer.
Это может показаться немного глупым, но на самом деле оно может делать очень интересные вещи. Например, используя eval, вы можете создавать функции непосредственно на основе пользовательского ввода. Это позволяет программе изменяться в зависимости от времени или действий пользователя, а применяя логические выводы, вы можете получить потрясающие результаты.
На практике eval используется редко, но, возможно, вы видели, как кто-то использовал его для получения трудно индексируемых объектов. Одна из проблем объектной модели документа (DOM) заключается в том, что иногда бывает сложно получить запрошенный объект. Например, вот функция, которая спрашивает пользователя, какое изображение преобразовать: Чтобы преобразовать какое изображение, вы должны использовать следующую функцию:
функция swapOne()
{
var the_image = Prompt("поменяйте попугая или сыр","");
вар the_image_object;
если (the_image == "попугай")
{
the_image_object = window.document.parrot;
}
еще
{
the_image_object = window.document.cheese;
}
the_image_object.src = "ant.gif";
}
Наряду с этими тегами изображений:
<img src="/stuff3a/parrot.gif" name="parrot" />
<img src="/stuff3a/cheese.gif" name="cheese">
Обратите внимание на несколько таких строк:
the_image_object = window.document.parrot;
присваивает объект изображения переменной. Хоть это и выглядит немного странно, но грамматически верно. Но что произойдет, если у вас будет 100 изображений вместо двух? Вам придется написать много операторов if-then-else, если бы это было так:
функция swapTwo()
{
var the_image = Prompt("поменяйте попугая или сыр","");
window.document.the_image.src = "ant.gif";
}
К сожалению, JavaScript будет искать изображение с именем the_image вместо «cheese» или «parrot», как вы ожидали, поэтому вы получите сообщение об ошибке: «Не слышал об объекте с именем the_image».
К счастью, eval может помочь вам получить нужный объект.
функция SimpleSwap()
{
var the_image = Prompt("поменяйте попугая или сыр","");
вар the_image_name = "window.document" + the_image;
вар the_image_object = eval(the_image_name);
the_image_object.src = "ant.gif";
}
Если пользователь вводит «попугай» в поле подсказки, во второй строке создается строка window.document.parrot. Затем третья строка, содержащая eval, означает: «Дайте мне объект window.document.parrot». объект изображения, который вы хотите. Получив объект изображения, вы можете установить для его атрибута src значение ant.gif. Это на самом деле очень полезно, и люди часто его используют.