2012-05-28 27 views
4

按照ECMA-262 Specification,下面的語句返回1JavaScript eval(「{}」)返回行爲?

eval("1;;;;;") 
eval("1;{}") 
eval("1;var a;") 

確保:

一個語句列表的值是在語句列表的最後一個值產生報表的價值。

你能解釋這些不同的回報嗎?

eval("{}") // undefined 
eval("var a={}; a;") // {} 
eval("var a={};") // undefined 

是什麼1;{};之間的區別?

+1

這是一個重複,FWIW。 (這只是笨拙很難找到這樣的重複上SO: - /) – 2012-05-28 23:18:04

+0

http://stackoverflow.com/questions/9943278/javascript-eval-expression(這是同樣的想法,但結果在不同的觀測語義由於無效的語法) – 2012-05-28 23:19:21

回答

6

孤獨,{}被解釋爲,而不是一個對象。它不包含任何語句,因此不會影響eval("1;{}")的值。要強制它被解釋爲一個對象,你可以使用括號:

eval("1;({})"); // {} 
+0

我懂了!我甚至沒有想到塊的東西,謝謝;) –

+0

'「{}」'就足夠了...(用後,第二部分的平衡,沒有'1;') – 2012-05-28 23:14:52

2

它看起來對我來說,eval被解釋{}作爲代碼塊的分隔符,因此不具有內在價值。