javascript - 当 JS 压缩器重命名变量时,如何通过 eval() 设置变量?

标签 javascript compression

我有一个 JS 文件做这样的事情:

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

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

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

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

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

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

最佳答案

不要使用 eval 动态创建变量。

您可以简单地捕获全局对象,然后在其上创建的任何属性无论如何都是全局范围内的变量...

window["value"] = "something";

然后通过这种方式创建变量,您不必使用 eval 来获取变量名称,因为您是使用字符串创建它们。

关于javascript - 当 JS 压缩器重命名变量时,如何通过 eval() 设置变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13814628/

相关文章:

javascript - AJAX 异步响应回调

javascript - 在具有未定义响应的 VueJs 中发布请求

javascript - Makefile 组合js文件,制作压缩版

ffmpeg - 为什么在 x265 中使用 CQP 模式的初始 QP 的 block 级实际 QP 值是负 3?

java - Apache FTP 客户端在传输时是否压缩文件?

javascript - 比较两个对象以获得匹配的元素

javascript - React Hooks 状态未更新

javascript - 回调不是 mongoose.find({}) 中的函数

Python 压缩运行长度编码

python - 用于多个输入的 SequenceMatcher,而不仅仅是两个?