我应该在javascript中使用eval吗?

时间:2014-09-17 12:20:08

标签: javascript performance eval

我的问题是我有一个非常长的字符串要解析(基本上是一个表示为字符串的对象),我试图手动解析它而不使用eval,我已经有1000多行循环函数,我甚至没有完成算法。

我正在检查这是如何在jQuery.metadata中完成的,他们只使用了eval!我的1000行代码可以缩小到一个eval,但这样安全吗?我听说这个函数既不快也不安全,但考虑到所有这些循环和解析,我的算法也很慢。

e.g。

<button onajax="{reload:'#someitem',callback: function('somedata'),items:{1,2,3}}">

我需要设置

var onajaxargs = {reload:'#someitem',callback: function('somedata'),items:{1,2,3}};

2 个答案:

答案 0 :(得分:1)

如果你可以提供一些关于你想要做什么的更多信息,那么我可以更好地回答你的问题,但是像Roman说的那样,JSON似乎是解析字符串的最佳方法。

这解释了如何使用JSON.parse(): Parse JSON in JavaScript?

答案 1 :(得分:0)

如果您还没有,请参见Why is using the JavaScript eval function a bad idea?

我建议使用这种首先编码为JSON的方法,然后“恢复”你的函数成员。 http://ovaraksin.blogspot.com/2013/10/pass-javascript-function-via-json.html

jsonText='{"reload":"#someitem","callback": "function(somedata) {alert(somedata)}","items":[1,2,3]}';

var jsonTransformed = JSON.parse(jsonText, function (key, value) {
        if (value && (typeof value === 'string') && value.indexOf("function") === 0) {
            // we can only pass a function as string in JSON ==> doing a real function
            var jsFunc = new Function('return ' + value)();
            return jsFunc;
        }

        return value;
});

几点意见:

  1. 你需要有一个规范的JSON来确保它的工作原理 - 所有字符串和成员名称都用双引号括起来。
  2. 您需要在字符串中提供正确的引号转义(单引号和双引号)。
  3. 您需要使函数成员在字符串的开头包含文本“function”。
  4. 数组成员用方括号括起来,而不是原始帖子中的花括号。