2012-12-11 74 views
2

我有一個JS文件,做這樣的事情:如何在JS壓縮器重命名變量時通過eval()設置變量?

var value = localStorage.getItem(somekey); 
if (!value) 
{ 
    eval("value = String(" + somevariablename + ");"); 
} 

這個腳本試圖檢索從本地存儲的值。如果該值在本地存儲中不存在,則設置爲使用先前定義的變量值的eval值。由於value的值必須設置爲變量名稱的字符串值,因此在這種情況下,我需要使用eval。我不知道任何其他方式。

問題是,最好的JS壓縮機提供了一種方法來自動重命名變量名稱,以節省空間。我最終是這樣的:

var f=localStorage.getItem(e); 
if(!f){eval("value = String("+e+");")} 

所以問題是,我的變量得到了改名,但壓縮機不知道在EVAL字符串改變變量的名稱。我從來沒有見過一臺足夠聰明的壓縮機來解決這個問題。

在構建環境中以自動方式處理此問題的最佳方式是什麼?進入並手動更改evals中的變量名稱非常耗時,因爲在我的情況下,這樣的代碼發生了很多。

+3

爲什麼要使用eval?只需使用'value = somevariablename.toString()' – PitaJ

+0

你可以這樣使用eval:'value = eval(「String(」+ somevariablename +「)」) - 問題是:如果變量名稱改變,你會如何現在'somevariablename'中的變量名是正確的? – vstm

回答

2

請勿使用eval在運行中創建變量。

你可以簡單地趕上全球對象,然後在其上創建的任何屬性是基於全球範圍內反正一個變量...

窗口[「值」] =「東西」;

然後通過這種方式創建您的變量,您不必使用eval來獲取變量名稱,因爲您正在使用字符串創建它們。