2014-04-29 100 views
2

在JavaScript中,eval()接受一個字符串並執行它爲JavaScript代碼,例如,的JavaScript構建相當於eval()函數

eval("alert('I am parsed as JavaScript code.');"); 

我比eval()感興趣的是建在那裏,其他的,可能會被使用出於同樣的目的。我知道eval()是邪惡的。這是爲了教育目的。

到目前爲止,我已經發現了三個這樣的構造:

  1. Function構造:

    var f = new Function("alert('I am also parsed as JavaScript code.');"); 
    f(); 
    
  2. setTimeout()功能:

    setTimeout("alert('So am I.');", 0); 
    
  3. setInterval()功能:

    setInterval("alert('Me too!');", 0); 
    

是可以用來實現這一行爲有其他結構?如果是,哪些?如果否,有什麼好的證據來證實這一說法?

+0

這些「結構」在內部使用eval,這就是爲什麼他們不應該這樣使用。 – adeneo

+0

@ A1rPun是的,這是教育。事實上,我想知道我應該警惕哪種結構。 –

+0

你讓我想知道:) +1 – A1rPun

回答

1

排序的晦澀難懂,但只要在頁面沒有加載完成尚未...

document.body.setAttribute("onLoad","alert('Hello world!');"); 

不是每個人在做。對?

+0

這是一個整潔的想法,雖然它不知道如何不是我希望的那種詳盡的答案。加上@KevinB使用'document.write'的想法,我們可以說一般來說任何可以修改DOM的操作也可以用來執行任意代碼嗎? –