[英]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.