【问题标题】:SyntaxError while eval()'ing an objecteval()'ing 对象时出现语法错误
【发布时间】:2012-05-28 22:03:12
【问题描述】:

我正在尝试使用 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() 调用前的真实数据

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;

【问题讨论】:

  • 你能在eval()之前给我们data的确切值吗?
  • @ldiqual 已编辑以在eval() 调用之前添加有效和无效数据。
  • 您的“不工作”data 中没有作业。你只是把{ } 没有var obj = { }。此外,“working-data”最后一行的obj 应该做什么?
  • @ldiqual eval() 返回执行的最后一条语句的结果。在我的“工作”案例中,这是obj(没有它,eval() 返回一个未定义的对象)。在“不工作”的情况下,我希望 {...} 对象是最后一个语句,因此会被返回。

标签: javascript node.js object eval


【解决方案1】:

当你第一次评估时

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

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

所以你正在尝试执行代码

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

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

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

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

【讨论】:

猜你喜欢
  • 2011-02-15
  • 2017-08-29
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 2017-12-18
  • 2011-06-22
  • 1970-01-01
相关资源
最近更新 更多