为什么{} + {}在Chrome控制台中不再为NaN?

2020/11/16 19:22 · javascript ·  · 0评论

我今天注意到,NaN当您输入{}+{}控制台,Chrome 49不再输出而是输出字符串[object Object][object Object]

为什么是这样?语言改变了吗?

现在,Chrome devtools会自动在隐含的一对括号(请参阅代码)中包装所有以开头{和结尾的内容,以强制将其评估为表达式。这样,现在创建一个空对象。如果您回顾历史记录(),则会看到此内容,前一行将包含在中}{}(…)

为什么?我不知道,但是我可以猜到它可以减少不知道block-vs-object-literal内容的新手的困惑,如果您只想计算一个表达式,它也将更加有用。

实际上,这就是原因,如错误499864中所述纯粹的方便。而且因为节点REPL也具有它请参见代码)。

如果选中此选项后单击向上箭头,则会注意到而不是{} + {}显示({} + {}),结果为"[object Object][object Object]"

相比之下,在Firefox中,{} + {}仍会显示NaN,但是如果您这样做({} + {}),也会显示"[object Object][object Object]"

因此,当Chrome浏览器看到此操作时,它似乎会自动添加周围的括号。

从Chrome 54开始,关于控制台:

📎-“我已为您将块转换为对象” -Clippy
不幸的是,我自己添加了Clippy报价。控制台不会提供有关为您完成的操作的信息。

新规则非常简单,为我们省去了繁琐地键入这两个困难字符o=0,在将对象文字粘贴到控制台之前的麻烦

  • 如果您的代码以以下内容开头:可选的空格,(不允许使用任何注释),后跟一个{
  • 该代码可以解释为一个对象;
  • 并且该对象后面没有其他代码,除非:
  • 第一个对象之后的代码是二进制运算符,
  • 那么您可以根据需要进行任意操作,包括分组
  • 如果最终运算符在右侧位置具有Object文字;
  • 并且该最终对象尚未在括号中分组
  • 并且该代码不以分号终止
  • 并且代码后没有注释(内部注释是允许的,只要它们不在初始位置或最终位置即可)
  • 然后,只有这样,您的JavaScript(实际上可能是无效代码)才能重新输入为有效对象。您不会被告知您的代码已被重新​​解释。

{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]"

疯狂而始终如一的我可以处理...疯狂而又前后不一的谢谢!

本文地址:http://javascript.askforanswer.com/weishenme-zaichromekongzhitaizhongbuzaiweinan.html
文章标签: ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!