2013-08-27 15 views
0

我一直使用JSON一點玩耍,但我發現我的東西不太瞭解,比如,我有這樣的一段代碼:查詢有關JSON在JavaScript

var str = "{'name':'vvv'}";      
var cjson = eval ("(" + str + ")"); 
alert(cjson.name); 

它工作正常,但是用這段代碼

var str = "{'name':"+'vvv'+"}";  
var cjson = eval ("(" + str + ")"); 
alert(cjson.name); 

它沒有,我得到了下面的螢火蟲錯誤:ReferenceError:vvv沒有定義。

爲什麼不使用第二種方法,在這兩種情況下是不是有效的字符串?

+0

這不是有效的JSON,需要雙引號。 – bfavaretto

+0

你需要在'vvv'周圍添加引號,在字符串連接之後你得到var str =「{'name':vvv}」;你應該有像var str =「{'name':」+「'vvv'」+「}」; – uthark

回答

3

這是一個字符串,是的。但不是相同的字符串,而不是有效的JSON。

var str = "{'name':" + 'vvv' + "}"; 

是一樣的:

var str = "{'name':" + "vvv" + "}"; 

這是一樣的:

var str = "{'name':vvv}"; 

當您嘗試,以評估,就好像你宣佈:

var cjson = { 'name': vvv }; 

並且您沒有變量,名稱爲vvv

+0

爲了記錄,有效的JSON應該是'var str ='{「name」:「vvv」}';' – bfavaretto

+0

簡潔且非常明確的答案,謝謝。 – Arturo

0

當你做var str = "{'name':"+'vvv'+"}";時,生成的字符串是"{'name':vvv}",其中vvv不是字符串文字。因此,eval將嘗試在執行範圍內解決它,因爲它在那裏沒有找到它會引發錯誤

+0

非常明確的答案呢!謝謝你! – Arturo