在Phonegap中使用eval()是不好的做法吗?

时间:2014-01-18 06:40:29

标签: javascript cordova

我知道使用eval()对于Web开发来说是一种不好的做法,因为黑客可以将它用于跨域脚本编写。但是,将它用于移动应用程序开发仍然是一个不好的做法?如果是这样,为什么?

2 个答案:

答案 0 :(得分:1)

是的,它仍然很糟糕。

如果您的应用将数据发送到服务器进行处理,则可能会恶意使用eval。此外,如果您的应用是游戏,例如,可以通过更改内部变量和包含分数的对象来使用eval作弊。

不要忘记使用eval运行代码可能会相对较慢。移动设备通常比“普通”计算机慢,因此如果经常使用,您的应用程序看起来会比其他应用程序慢得多。

无论如何,你确定你真的需要eval吗?总有更好的选择。

答案 1 :(得分:1)

在应用程序开发期间使用eval()会让您的生活变得艰难。评估的代码可以访问评估范围内的变量。当新代码覆盖您的变量时,这很容易导致程序出错。由于eval的代码是一个字符串,因此您无法轻松调试此问题。添加安全性和性能问题(JS解析器尝试预编译代码以便更快地执行,如果代码隐藏在字符串中,则不会发生这种情况)并且您会发现可以使您的工作更容易避免使用eval()。< / p>

如果您确实需要使用隐藏在字符串中的代码,请使用Function()构造函数,并将代码字符串作为参数。这样你至少可以避免变量覆盖问题。

eval()和Function()之间的区别示例:

(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
})();