为什么<script> {'foo':'bar'}</script>
导致未捕获的SyntaxError:意外的令牌:在chrome
和<script> {foo:'bar'}</script>
就好了。
答案 0 :(得分:10)
因为它不是对象文字,所以它是一个代码块。括号内的内容未被解析为键值对,它被解析为代码。
foo: 'bar'
可以作为代码使用,foo:
是标签,'bar'
是表达式。
'foo':
不正常,因为代码作为标签不能是字符串,它必须是标识符。
要使它成为一个对象文字,你必须使它成为一个表达式,如:
<script> var x = {'foo':'bar'}</script>
或:
<script> ({'foo':'bar'})</script>
答案 1 :(得分:0)
请注意,这不是JSON,您需要使用双引号("
)。
当您将此对象文字直接放入<script>
元素时,它不会被解析为expression(它将是一个有效的对象)。相反,大括号被解析为block statement,foo:
被解析为label。 'foo'
将是无效标签,因此语法错误。