因此,可以說我在JavaScript中定義的字符串:執行字符串作爲一塊的HTML/JavaScript代碼
var s = "function();"
我可以執行代碼,如果我知道這個字符串的值?
如果是,那麼我可以在一個字符串內有多個命令嗎?例如:
var k = "function(); a = a + 1;"
在此先感謝
因此,可以說我在JavaScript中定義的字符串:執行字符串作爲一塊的HTML/JavaScript代碼
var s = "function();"
我可以執行代碼,如果我知道這個字符串的值?
如果是,那麼我可以在一個字符串內有多個命令嗎?例如:
var k = "function(); a = a + 1;"
在此先感謝
您可以使用eval
,並且會執行多條語句。 但是,使用eval
通常是一個壞主意。在大多數情況下,您可能可以完成任何您試圖做的事情,而不需要eval
。
eval
如果與用戶提供的代碼一起使用(如來自表單或URL的內容),則可能會相當危險。它打開你達Cross-Site Scripting (XSS) attacks。只是避免它是最好的行動方式,因爲this answer提到,在將其輸入eval
之前對輸入進行消毒不是直截了當,而且很容易出錯。
使用eval
時出現的其他幾個不太重要的問題是它使代碼難以調試,而且速度很慢。如果瀏覽器不像其他代碼那樣對其進行優化和/或緩存,它也很難實現。
更新
我很驚訝,我忘了提及這個,當我最初回答了這一點,但明確地使用eval
說法是不是唯一的方法eval
在JavaScript調用。通過code instead of a function reference至setTimeout
或setInterval
將隱式評估該代碼。
// This evals:
setTimeout("doSomething()", 1000);
// This does not eval:
setTimeout(doSomething, 1000); // also shorter :)
雖然不完全一樣eval
,則Function
constructor也有similar security concerns associated with it。
let xss = 'alert("XSS")';
// whatever is in the string passed to Function
// becomes the body of the function
let doSomething = new Function(xss);
document.querySelector('button').addEventListener('click', doSomething, false);
<button>Do Something</button>
正如eval
,應注意當使用字符串作爲輸入setTimeout
,setInterval
或Function
構造,特別是當用戶輸入將被傳遞到上當。
另見:
您可以使用eval()
來評估/執行JavaScript代碼/表達式:
var k = "var a = 0; alert(a); a = a + 1; alert(a);"
eval(k);
的eval
功能將評估一個傳遞給它的字符串。它是慢。這是因爲要評估的代碼必須在現場解析,因此需要一些計算資源。
使用'的eval()'... [檢查這裏](https://developer.mozilla.org/en-US/docs/We B/JavaScript的/參考/ Global_Objects/EVAL)... –