我的问题是我有一个非常长的字符串要解析(基本上是一个表示为字符串的对象),我试图手动解析它而不使用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}};
答案 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;
});
几点意见: