簡體   English   中英

如何對包含 function 的字符串執行“評估”

[英]How do I do “eval” on a string containing a function

在以下示例中,我希望bc = 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM