2012-12-16 58 views
2

我已經在網站上閱讀了很多問題,但沒有理解括號內的問題。邪惡的eval +括號樣本?

eval('{a:alert(1)}'); //alert 1 

而且此警報1:

eval('('+'{a:alert(1)}'+')'); //alert 1 

那麼,如何'()'幫助我嗎?

我已經知道()使應該被理解成epxression而不是作爲一個聲明

的代碼,但我沒有看到我的樣品中它是如何要去幫助。

您能否提供樣品?

+0

您已經自己回答了這個問題:圓括號用於將對象文字(表達式內)而不是代碼塊解釋爲對象文字。 –

+0

@RobW如果它是相同的,爲什麼我需要'()'?我沒有看到好處(我一定是錯的)。你能否提供一個會對我的網站造成傷害的例子,以及()如何提供幫助? –

+0

這取決於你想要什麼。你有什麼打算? '{a:alert(1)}'是帶有標籤a的代碼塊,'({a:alert(0)})'是一個對象文本,其中包含alert(0)'的結果。 –

回答

1

考慮:前面已經提到

eval("({a: 'my great object'}.a);"); 

eval("{a: 'my great object'}.a;"); 

:第二個是與標籤的代碼塊這樣。一個根本沒有任何意義。

+0

新,恕我直言,'()'只適用於json ...對嗎?但'{a:'...'}'不是json ...我不明白爲什麼我應該在eval json obj時使用()。 –

+0

改爲使用JSON.parse。 (尋找着名:eval是邪惡的)。它不僅與json:請參閱'function a(){ return(endl here!) {a:'a'}; } a();'不能像預期的那樣工作(分號插入+指定的代碼塊在這裏) – neo