2012-06-17 29 views
1

我以前從未使用過eval(),所以我認爲我剛剛得到了可怕的錯誤語法。出了什麼問題如下:Eval無法正常工作 - JavaScript

var JSONAsString = '{"item1":"one", "item2":"two", "item3":"three"}'; 
var JSONAsObject = eval(JSONString); 
alert(JSONAsObject.item1); 

因爲它似乎並不奏效 - 我加載頁面,沒有任何反應。

是的,我知道我不應該使用eval。我假設JSON.parse()的語法與eval的語法相同...對嗎?如果是這樣,如果(修復代碼之後)我用JSON.parse替換eval,它仍然會執行相同的操作嗎?

+0

'JSONString' VS'JSONAsString','JSONAsObject' VS'JSONObject' - 你的變量名是不正確的。除此之外,在解析/評估它之後,它是一個JavaScript對象,而不是JSON(僅僅是挑剔;)),所以'JSONObject'不適合。 – ThiefMaster

+0

假設你有正確的變量名,''eval'字符串導致語法錯誤,因爲'{...}'被解釋爲* block *而不是對象字面量。 –

+0

@ThiefMaster - 這就是爲什麼它是JSON *作爲*(an)對象。 – Bluefire

回答

5

當使用eval你需要用的JSON在()

var JSONAsString = '{"item1":"one", "item2":"two", "item3":"three"}'; 
var JSONAsObject = eval('(' + JSONAsString + ')'); 
alert(JSONAsObject.item1); 

但是,你應該使用JSON.parse()從一開始就,不只是後來。否則可能無效的JSON是有效的JavaScript可能會工作,但切換到JSON.parse時停止工作。

請注意,使用JSON.*時應包含json2.js,因爲某些較舊的瀏覽器不支持本機JSON。

+0

啊,謝謝!這是否適用於我放入變量然後使用'eval()'或僅JSON解析的所有代碼? – Bluefire

+0

使用'JSON.parse()',忘記其餘的。 – MaxArt

+0

@MaxArt說。但是無論如何,如果你'eval()'*表達式*,你會希望在其周圍使用'()'來確保它不被評估爲*語句*。 – ThiefMaster