我今天注意到 Chrome 49NaN
在您输入{}+{}
控制台时不再输出。相反,它输出字符串[object Object][object Object]
。
为什么是这样?语言变了吗?
我今天注意到 Chrome 49NaN
在您输入{}+{}
控制台时不再输出。相反,它输出字符串[object Object][object Object]
。
为什么是这样?语言变了吗?
Chrome devtools 现在会自动将所有以隐式括号开头{
和结尾的内容包装起来}
(请参阅代码),以强制将其计算为表达式。这样,{}
现在创建一个空对象。如果您返回历史记录 ( ↑),您可以看到这一点,前一行将包含在(…)
.
为什么?我不知道,但我猜它可以减少不了解块与对象字面量的新手的混淆,而且如果您只想评估表达式,它也会更有帮助。
事实上,这就是原因,正如错误 499864 中所讨论的那样。纯粹的方便。并且因为节点 REPL 也有它(见代码)。
如果您在检查后点击向上箭头,您会注意到{} + {}
它显示而不是({} + {})
,这导致"[object Object][object Object]"
.
相比之下,在 Firefox 中,{} + {}
仍然显示NaN
,但如果你这样做({} + {})
也会显示"[object Object][object Object]"
。
所以,看起来 Chrome 在看到这个操作时会自动添加周围的括号。
不幸的是,我自己添加了 Clippy 引用。控制台没有提供有关它为您所做的工作的信息。
新规则非常简单,让我们省去了费力输入这 2 个困难字符o=
或0,
在将 Object Literals 粘贴到控制台之前的麻烦:
{
;{wat:1}),({wat:2}
终于又报错了。
{let i=0;var increment=_=>i++}
最后,这是正确允许的,这是一种很好的闭包方式。
但是,以下是错误的对象,这就像@Bergi 提到的那样方便,它解释了 JS 错误以帮助您!规范说它是一个带有标记语句“foo”的块,其文字 1 未分配给任何东西。
{foo:1}
上面应该是一样的
if(1) {
foo: 1
}
以下被正确地视为一个块......因为它前面有一个注释!
//magic comment
{foo:1}
这是这样的:
{foo:1}
//also magic
这是一个对象:
{foo:
//not so magic comment
1}
这是一个错误
//not so magic comment
{foo:1}.foo
这是这样的:
{foo:1}.foo
这可以:
1..wat
undefined
这是这样的:
['foo'][0]
下一个被正确解释为用 a 重击到表达式位置的对象,0,
这通常是我们如何明确地确保我们有一个表达式而不是一个语句。
0,{foo:1}.foo
我不明白为什么他们将值包装在括号中。JS 有一些荒谬的设计决定,但在这种情况下试图让它表现得更好并不是一个真正的选择,控制台需要正确运行 JS,我们需要确信 chrome 不会只是猜测它认为我们真正的意思是做别的事情。
如果您不喜欢逗号运算符,则可以使用赋值
x = {foo:1}.foo
因为就目前而言
{} + {} + {}
"[object Object][object Object][object Object]"
;{} + {} + {}
"NaN[object Object]"
疯狂和一致我可以处理......疯狂和不一致不,谢谢!