我不能在 Dev Console 中编写对象文字符号?

I can't write object literal notation in Dev Console?

我写这个的时候出错了:

{a:1, b:2}

但我刚写这篇文章的时候不是

{a:1}

我在 Firefox 中试过,chrome 都出错了。

赋值给变量不会报错

一直都是这样吗,为什么会出错。命令行中的nodejs没有错误。

复制粘贴 json 代码以更好地探索它后,我发现了错误。然后做了实验..(这一定是新东西)

{ /* ... */ }block statement.

如果你想让它被解析为一个object initialiser,你必须在需要表达式的地方使用它。

一些示例:

{} + ''; // `0`, parsed as block
'' + {}; // `"[object Object]"`, parsed as expression
{} * 1; // Error, parsed as block
1 * {}; // `NaN`, parsed as expression

一种将其解析为表达式并获取结果对象的方法,因为结果将其括在括号内:

({ /* ... */ })

将对象括在括号中,如下所示:

({a:1, b:2})

原因是 JavaScript 对许多不同的事物使用大括号,例如 if 语句、for 循环,在您的例子中,还有对象声明。

当您不进行任何类型的赋值时,换句话说,将其设置为等于一个变量,则默认情况下大括号的含义有所不同。

要坚持JavaScript将这些浮动大括号视为对象文字表示法,您必须将大括号括在圆括号中。

(this has to be something new)

没有。这个:

{a:1}

...也不被视为对象文字。你可以看到当你输入它到控制台时,因为控制台返回1而不是带有对象。它被解释为块语句的开始,然后是 label a:,然后是表达式 1,然后是块的结尾。

考虑到这一点,您可以看到:

{a:1, b:2}

...被解释为块语句的开头,标签 a:,然后是表达式1, b,后跟意外的:.

无论是在浏览器控制台还是在 html 页面的脚本中,都会出现这种情况。要让浏览器将整个事物视为一个表达式,只需将其括在括号中即可:

({a:1, b:2})