2014-01-18 60 views
0

我知道使用eval()對於Web開發的目的是一種不好的做法,因爲黑客可以將其用於跨域腳本編寫。但是,將它用於移動應用程序開發仍然是一種不好的做法?如果是這樣,爲什麼?在Phonegap中使用eval()是不好的做法嗎?

+0

,我不會是懶得用這一點,但我沒有任何合理的論據,所以我不會添加回答。 – dachi

+0

有什麼理由想要使用它?如果它對桌面不好,對手機來說仍然不好。 – zero298

回答

1

在應用程序開發過程中使用eval()會使您的生活變得艱難。評估的代碼可以訪問其評估範圍內的變量。當新代碼覆蓋你的變量時,這很容易導致程序中的錯誤。而且由於被評估的代碼是一個字符串,所以你不會那麼容易地調試這個問題。添加安全性和性能問題(JS解析器嘗試預編譯代碼以加快執行速度,如果隱藏在字符串中的代碼不會發生),並且您會發現可以更輕鬆地避免使用eval()。

爲了防止真的需要使用隱藏在字符串中的代碼,請使用Function()構造函數,將代碼字符串作爲參數。這樣你至少可以避免變量覆蓋問題。 EVAL之間的差異())

實例和功能(:

(function(){ 
    var a = 1; 
    eval('var a = 2; console.log(a)'); // logs 2 
    console.log(a); // also logs 2, the a variable is changed 
})(); 

(function(){ 
    var b = 1; 
    Function('var b = 2; console.log(b)')(); // logs 2 
    console.log(b); // logs 1, the code string was executed in it's own scope 
})(); 
1

是的,它仍然是壞的。

如果您的應用向服務器發送數據進行處理,eval可能會被惡意使用。另外,如果您的應用程序是一款遊戲,例如,通過更改內部變量和包含分數的對象,eval可用於作弊。

不要忘記使用eval運行代碼可能會相對較慢。移動設備通常比「普通」電腦慢,因此如果經常使用,您的應用會比其他應用慢得多。

無論如何,你確定你確實需要eval?總是有更好的選擇。

相關問題