2

我有一个执行以下操作的 JS 文件:

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

此脚本尝试从本地存储中检索值。如果本地存储中不存在该值,它将设置为使用先前定义的变量值的评估。在这种情况下, eval 对我来说是必需的,因为必须将 的值value设置为变量名的字符串值。我不知道有什么其他方法可以解决这个问题。

问题是大多数优秀的 JS 压缩器都提供了一种自动重命名变量名以节省空间的方法。我最终得到这样的结果:

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

所以问题是我的变量被重命名了,但压缩器不知道要更改 eval 字符串中变量的名称。我从未见过足够聪明的压缩机来解决这个问题。

在构建环境中以自动化方式处理此问题的最佳方法是什么?进入并手动更改 eval 中的变量名称非常耗时,因为在我的情况下,这样的代码经常出现。

4

1 回答 1

2

Do not use eval to create variable on the fly.

You can simply catch the global object, and then any property created on it is a variable on the global scope anyway...

window["value"] = "something";

And then by creating your variable this way, you do not have to use eval to get the variable names since you are creating them with a string.

于 2012-12-11T06:19:58.143 回答