Есть ли 'код/функция/АЛГОРИТМ' преобразовать строку яваскрипта ?:Выполнение JavaScript кода из строки
var alert = "alert('Hello World!')";
В JavaScript синтаксиса; в этом случае на экране отобразится Hello World!
.
Есть ли 'код/функция/АЛГОРИТМ' преобразовать строку яваскрипта ?:Выполнение JavaScript кода из строки
var alert = "alert('Hello World!')";
В JavaScript синтаксиса; в этом случае на экране отобразится Hello World!
.
да, есть:
var alert = "alert('Hello World!')";
eval(alert);
Оценивает JavaScript код, представленный в виде строки.
Here is the explanation and other uses of the eval() function.
Это может привести к некоторым непредвиденным проблемам, так как вы выполняете некоторую произвольную строку в качестве яваскрипта кода. Если вы объяснили, почему вам нужно делать то, что вы делаете, возможно, есть более безопасная альтернатива.
Ради тех, кто наткнулся на этот ответ, следует отметить, что переводчик, специфичный для вашего прецедента, почти всегда превосходит маршрут. – matt3141
Спасибо, огромное спасибо –
Вы можете использовать eval
, но это очень обескуражено!
var alert = "alert('This is evil');"
eval(alert);
Вы ищете eval. Вы хотите быть осторожным, это может создать определенные риски для безопасности.
Вы можете прочитать эту eval() isn’t evil, just misunderstood
var alert = "alert('Hello World!')";
eval(alert);
An лучший метод может быть что-то вроде этого:
<script src="pretendToBeJavascript.php"></script>
// pretendToBeJavascript.php contents:
header('Content-type: text/javascript');
echo "alert('Hello World!')";
К ниверутору всех ответов, почему? Все ответы верны. Может быть, не рекомендуется, но большинство из них это замечает. – Martijn
Существует любое возможное решение:
var alert = "alert('Hello World!')";
eval(alert);
Убедитесь, что eval
is evil @Frits ван Campen
Вы можете рассмотреть вопрос о создании синтаксического анализа, специфичные для вашего использования. Это ограничит мощность eval
исключительно вашим предполагаемым поведением, например, следующие ограничения кода для выполнения глобальной функции.
var parse_vals = function(expr) {
if(expr.match(/^['"][^'"]+['"]$/)) {
// parse a string literal
return expr.substr(1, expr.length - 2);
} else if(!isNaN(parseInt(expr))) {
// parse a number
return parseInt(expr);
} else {
// fail in parsing literal
return null;
}
};
var alert_str = "alert('Hello World!')",
comps = alert_str.match(/^([^(]+)\(([^)]+)\)$/);
// => ["alert(...)", "alert", "'Hello World!'"]
if(comps) {
// apply a global function to the provided arguments, parsed.
// all values thus need to be literals, no variable access.
window[comps[1]].apply(window, comps[2].split(/,\s?/).map(parse_vals));
} else {
alert("Invalid code provided.");
}
Как уже говорилось, eval
небезопасен и следует использовать с осторожностью, если используется. Следовательно, парсер, специфичный для использования, является гораздо лучшим решением. Что еще более важно, сила полноправного оценщика ребенка - , идущая, чтобы быть излишним, несмотря ни на что. Компоненты выражения, которые будут меняться, могут быть выделены и обработаны. Если вся строка является переменной, вы разрешаете произвольную программу, и поэтому ее можно включить как независимый скрипт, например, <script src="data:...">
.
Вы имеете в виду 'eval'? Не используйте его, это ** зло **. – Halcyon
Для чего вам это нужно? (возможно, есть лучшее решение, чем ['eval'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval)) – Bergi
Вот [почему вы не должны использовать' eval() '] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#Don.27t_use_eval.21). Вероятно, вы захотите [вместо этого использовать функцию первого класса] (https: //developer.mozilla.орг/EN-US/Docs/Web/JavaScript/Справка/Global_Objects/Eval # Use_functions_instead_of_evaluating_snippets_of_code). –