语法错误,而eval()的一个对象

我试图parsing一个像这样的对象,使用nodejs:

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

a,b,c,d,e,fvariables与定义的值。

我真的很想这样,这个对象可以真正被读取(可以被人类写入)。

所以,我现在正在做的是打开一个包含前一个对象的文件,将数据放在一个可变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); 

然而,这不起作用(至less使用nodejs),在对象的第二个元素之后(在前面的例子中紧跟在2之后)的: token上带有SyntaxError。

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

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

与此同时,它的工作。

问题是why ?

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

谢谢!


eval()调用之前的真实数据

data与SyntaxError:

 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; 

当你第一次评价

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

括号实际上被认为是分隔块的分隔符(如if(){…})

所以你正试图执行代码

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

这显然是一个语法错误=>你得到的“SyntaxError:意外的令牌:”

在第二种情况下,评估的代码是有效的JavaScript,这就是为什么它的工作原理。

很难为您提供更好的select。 也许使用JSON.parse而不是直接评估,如果你的文件不能被信任。