繁体   English   中英

自动分号插入:NodeJS与浏览器之间的替代转换行为?

[英]Automatic semicolon insertion: Alternate casting behavior on NodeJS vs Browser?

我注意到在使用自动分号插入和类型转换时,NodeJS与浏览器的行为不同。

浏览器:

> {}+{}
NaN
> {}+{};
NaN
> ({}+{})
"[object Object][object Object]"
> ({}+{});
"[object Object][object Object]"

NodeJS:

> {}+{}
'[object Object][object Object]'
> {}+{};
NaN
> ({}+{})
'[object Object][object Object]'
> ({}+{});
'[object Object][object Object]'

A.为什么在有/没有分号或括号中对转换进行不同的解释?

B.哪个更符合该标准? 还是在标准中未解决?

更新:我发现它仅在NodeJS中执行此不同行为。 我以前认为这是V8 vs SpiderMonkey。

我猜想您正在将此输入不同的调试控制台。 一个调试控制台将其视为程序 ,另一调试控制台将其视为表达式


{}+{}

当解释为程序时,它等效于

{
  // empty block
}  // No semicolon inserted because statement is a block.
(+ Number({}))  // Prefix + operator coerces its argument to a number.

当解释为表达式时,它等效于

// Infix + operator concatenates if arguments are not both numeric
String({}) + String({});

将每个对象强制转换为字符串,然后将这两个字符串连接起来。


哪个口译员更符合该标准? 还是在标准中未解决?

如果按照我的设想,如果这发生在调试控制台中,则没有任何标准可以解决调试控制台必须执行的工作-它可以完全绕过JavaScript解释器,并将其输入解释为COBOL。

如果将其传递给eval ,则第一个解释必须获胜,因为eval的参数是被解析为Program的字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM