为什么不是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))'';' –