我知道使用eval()對於Web開發的目的是一種不好的做法,因爲黑客可以將其用於跨域腳本編寫。但是,將它用於移動應用程序開發仍然是一種不好的做法?如果是這樣,爲什麼?在Phonegap中使用eval()是不好的做法嗎?
0
A
回答
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
?總是有更好的選擇。
相關問題
- 1. 使用* str ++是不好的做法嗎?
- 2. 使用collections.OrderedDict是不好的做法嗎?
- 3. Singleton模式的使用在android中是不好的做法嗎?
- 4. 在jQuery和css中都使用類是不好的做法嗎?
- 5. 在cfloop中使用cfquery是不好的做法嗎?
- 6. 在SQL Server中使用xp_cmdshell通常是不好的做法嗎?
- 7. 在if語句中使用函數是不好的做法嗎?
- 8. 在類中使用全局函數是不好的做法嗎?
- 9. 在裝飾器中使用self是不好的做法嗎?
- 10. 在Java中使用Object.getClass()是不好的做法嗎?
- 11. 在asp.net中使用內聯css是不好的做法嗎?
- 12. 在Java中使用`this`是不好的做法嗎?
- 13. 在jQuery中做$(「*」)。live(「mouseover」,someFun)是不好的做法嗎?
- 14. 鬍鬚(php)中使用點符號是不好的做法嗎?
- 15. 在可選項上使用get()是不好的做法嗎?
- 16. 在這種情況下使用uint64_t是不好的做法嗎?
- 17. 對tkinter使用import *方法是不好的做法嗎?
- 18. 這是不好的做法嗎? C++
- 19. 這是不好的做法嗎?
- 20. 使用JavaScript的「真實性」是不好的做法嗎?
- 21. 廣泛使用python的getattr是不好的做法嗎?
- 22. 以編程方式使用NSArrayControllers是不好的做法嗎?
- 23. 使用LinkButtons作爲超鏈接是不好的做法嗎?
- 24. 使用document.on()會被認爲是不好的做法嗎?
- 25. 使用Type作爲'Property'是不好的做法嗎?
- 26. 使用多線程是不好的做法嗎? (通過SwingWorkers)
- 27. 同時使用swing和awt是不好的做法嗎?
- 28. 使用類內訪問器是不好的做法嗎?
- 29. 使用bcrypt(md5(pwd)+ salt)是不好的做法嗎?
- 30. 使用MySQL無符號整數是不好的做法嗎?
,我不會是懶得用這一點,但我沒有任何合理的論據,所以我不會添加回答。 – dachi
有什麼理由想要使用它?如果它對桌面不好,對手機來說仍然不好。 – zero298