爲什麼不是eval
致電alert("Summer")
?JavaScript eval
eval('(caption="Summer";alert(caption))');
它與「夏」中的引號有什麼關係?
爲什麼不是eval
致電alert("Summer")
?JavaScript eval
eval('(caption="Summer";alert(caption))');
它與「夏」中的引號有什麼關係?
Uncaught SyntaxError: Unexpected token ;
外括號毫無語法意義。試試這個:
eval('caption="Summer";alert(caption)');
只能使用正確的括號(分組操作符)評估*一個表達*,更多信息:http://bclary.com/2004/11/07/#a-11.1.6 – CMS
@CMS不,這是錯誤的。只要每個表達式只返回一個值,分組操作符就可以評估無限表達式(由逗號分隔符分隔)。分組操作員然後將返回最後返回的值,例如, '(alert(「foo」),alert(「bar」),window.foo =「bar」,1,2,3)'將評估所有分組表達式,但只返回'3'。所以(@Aistina)正確的答案是,在parantheses裏面的分號沒有語法上的意義:'eval('(caption =「Summer」,alert(caption))'';' – headacheCoder
@headacheCoder,表達式將被評估在你的例子中,但在最後,在最高級別(在評估分組操作符的級別),它的語法*就是*單個表達式*,逗號操作符允許這樣做,你可以在這裏檢查它的語法:http ://es5.github.com/#x11.14(這是一個遞歸製作),你可以在下面的解析器中嘗試你的例子:http://esparser.qfox.nl/,你會發現括號裏只有一個此級別的表達式令牌。 – CMS
額外的括號是錯誤的,這是正確的:
eval('caption="Summer";alert(caption)');
Chrome的控制檯:
eval('(caption="Summer";alert(caption))')
SyntaxError: Unexpected token ;
這工作:
eval('caption="Summer"; alert(caption)')
更更好的方式來做到這一點,避免語法問題做以下,
eval(function(){var x="test"; alert(x)}());
但這裏的評估是多餘的。如果要評估的代碼可以作爲來自某個源的字符串(例如,ajax調用或甚至用戶輸入)提供,則評估僅有意義。但是如果你已經有代碼作爲代碼,你不需要評估。對? – Frunsi
爲什麼你在引號內的所有東西都有括號? –
如果你想在表達式中使用序列語句,可以使用','運算符:'eval('(caption =「Summer」,alert(caption))'';' –