[英]How do I do “eval” on a string containing a function
在以下示例中,我希望b
和c = eval(a)
包含相同的 function,始終返回 true。 但是, a
沒有得到評估,而是引發語法錯誤: Uncaught SyntaxError: Function statements require a function name
。 但是,如果命名 function, c
包含undefined
。
var a = "function() { return true }";
var b = function() { return true };
var c = eval(a);
console.log(b,c);
問題在於,您輸入eval
的代碼正在被預期語句的地方評估,但您在var b =
之后的代碼被評估為表達式。 當解析器期待一個語句時, function
關鍵字開始一個 function聲明,它需要一個名稱。 但是在需要表達式的地方, function
關鍵字會啟動一個 function表達式,其中名稱是可選的。
要使您的eval
改為在表達式上工作,請使用(
和)
將代碼括起來:
var a = "function() { return true }"; var b = function() { return true }; var c = eval("(" + a + ")"); // −−−−−−−−−−^^^^^−−−^^^^^ console.log(b,c);
警告:使用eval
時要非常小心,並盡可能避免使用它。 它的目的是從字符串執行任意代碼。 如果您使用它,您必須相信該字符串的來源是可信賴的。 永遠不要從用戶 A 獲取用戶輸入,然后在用戶 B 的eval
中對其進行評估,除非用戶 B 完全知道發生了什么(例如,與上面的堆棧片段一樣——我是用戶 A,你是用戶 B;大概如果您單擊“運行”按鈕,您將意識到代碼將運行)。 事實上,在與非程序員打交道時,甚至不要在用戶 A 的 session 中評估來自用戶 A 的代碼。 :-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.