写这篇文章时出错:
{a:1, b:2}
但不是在我写这篇
的时候{a:1}
我在Firefox和chrome中尝试过都会出错。
如果我将其分配给变量,则没有错误。
总是这样吗?,为什么会有错误。命令行中的nodejs没有错误。
我发现错误,一旦我复制粘贴json代码以更好地探索它。然后做了实验..(这必须是新的东西)
答案 0 :(得分:3)
{ /* ... */ }
是block statement。
如果您希望将其解析为object initialiser,则必须在需要表达式的位置使用它。
一些例子:
{} + ''; // `0`, parsed as block
'' + {}; // `"[object Object]"`, parsed as expression
{} * 1; // Error, parsed as block
1 * {}; // `NaN`, parsed as expression
将其解析为表达式并将结果对象作为结果的方法将其括在括号内:
({ /* ... */ })
答案 1 :(得分:2)
将对象包裹在括号中,如下所示:
Complex Types
原因是JavaScript使用大括号表示许多不同的东西,例如if-statements,for-loops,以及在你的情况下,对象声明。
当你没有进行任何类型的赋值时,换句话说,将它设置为等于变量,那么大括号意味着默认情况下不同。
要坚持JavaScript将这些浮动大括号视为对象文字符号,必须将大括号括在括号中。
答案 2 :(得分:1)
(这必须是新的东西)
不。这样:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<form onsubmit="return false;">
<label for="username">Name</label>
<input type="text" size="10" name="username">
<input type="file" required />
<input type="submit" value="add" id="sbtn"/>
</form>
...也不被视为对象文字。您可以看到当您将其输入控制台时,因为控制台带有{a:1}
,不是带有对象。它被解释为块语句的开头,后跟label 1
,后跟表达式a:
,然后是块的结尾。
考虑到这一点,你可以看到:
1
...被解释为块语句的开头,标签 {a:1, b:2}
,然后表达式a:
后跟一个意外的1, b
。< / p>
无论是在浏览器控制台中还是在html页面的脚本中都是如此。要让浏览器将整个事物视为表达式,只需将其包装在括号中:
: