2012-05-28 37 views
1

我試圖解析這樣的對象,使用的NodeJS:的SyntaxError而EVAL()'荷蘭國際集團的對象

{ 
    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),在對象的第二個元素之後(在前一個示例中的2之後)的:標記上帶有SyntaxError。

爲了解決這個問題,現在我周圍我的對象有:

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; 
+0

能否在eval()之前給我們'data'的確切值? –

+0

@ldiqual在'eval()'調用之前編輯來添加工作而不工作的數據。 – Scharron

+0

您的「不工作」數據中沒有任何分配。你只是把'{}'不帶'var obj = {}'。另外,最後一行「工作數據」的「obj」應該是什麼? –

回答

2

,當你第一個eval

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

的支架,其實視爲塊定界符定界塊(如IF(){...})

所以你正在試圖執行該代碼

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

這顯然是一個語法錯誤=>你得到的「語法錯誤:意外標記:」

在第二種情況下,所評估代碼是有效的JavaScript,這就是它工作的原因。

很難告訴你一個更好的選擇。也許使用JSON.parse而不是直接評估,如果你的文件不能被信任。

+0

我不知道JavaScript有匿名塊,但它是有道理的。謝謝 ! – Scharron

+1

我修復了我的答案。 JavaScript中存在「獨立」塊,但不會創建變量範圍。這有時會令人困惑。查看https://developer.mozilla.org/en/JavaScript/Reference/Statements/block獲取更多解釋。 –

+0

謝謝傑羅姆! – Scharron

相關問題