在eval()对象时的SyntaxError

时间:2012-05-28 22:03:13

标签: javascript node.js object eval

我正在尝试使用nodejs解析这样的对象:

{
  1: [a, b, c],
  2: [d, e, f],
  ...
}

带有a,b,c,d,e,f个定义值的变量。

我真的想要这样,以便对象可以真正可读(并且可由人类写入)。

所以,我目前正在做的是打开一个包含前一个对象的文件,将数据放入变量data,然后注入

var a=1,b=2,c=3,d=4,e=5,f=6,...;

就在真实内容之前:

data = "var a=1,b=2,c=3,d=4,e=5,f=6,...;" + data;

最后,我使用eval()来获取可用对象:

my_obj = eval(data);

但是,这不起作用(至少使用nodejs),在对象的第二个元素之后的:标记上有一个SyntaxError(就在上一个示例中的2之后)。

为了解决这个问题,我现在围绕着我的对象:

data = "var obj = " + data + "; obj";
data = "var a=1,b=2,c=3,d=4,e=5,f=6,...;" + data;

有了它,它就有用了。

问题是why ?

可选的问题是:你有更好的方法来完成我想要的吗?

谢谢!


eval()调用前的真实数据

带有SyntaxError的

data

var a='a',b='b',c='c',d='d',e='e',f='f';
{
  a: 
  [a, a, a],

  b:
  [b, b, b]

}

Nodejs错误:

undefined:6
  b:
   ^
SyntaxError: Unexpected token :

工作data

var a='a',b='b',c='c',d='d',e='e',f='f';
var obj = {
  a: 
  [a, a, a],

  b:
  [b, b, b]

}

; obj;

1 个答案:

答案 0 :(得分:2)

当你第一次评估时

{
 a: 
 [a, a, a],
 b:
 [b, b, b]
}

括号实际上被视为分隔块的块分隔符(如if(){...})

所以你试图执行代码

 a: [a, a, a], b: [b, b, b];

这显然是语法错误=>你得到“SyntaxError:Unexpected token:”

在第二种情况下,评估的代码是有效的javascript,这就是它工作的原因。

很难为您提供更好的替代方案。如果您的文件不可信,可以使用JSON.parse而不是直接评估。