为什么Node REPL没有给出与Wat视频或我的浏览器控制台相同的结果

Why does Node REPL not give the same results as Wat video or my browser console?

本文关键字:浏览器 我的 控制台 结果 视频 Wat REPL Node 为什么      更新时间:2023-09-26

例如,在Wat和我的Chrome浏览器中:

{} + {}

NaN

但在Node REPL中,它是

[object Object][object Object]

诚然,后者对我来说更有意义-强制字符串然后执行是一件非常合理的事情。然而,我不明白这种差异是从哪里来的,因此,我不知道我有多信任REPL来理解一些简单的JS行为。

{}既是一个表达式(一个空对象文字),也是一个语句(一个空白块)。

eval()将尝试将其输入解析为语句
如果它不是"正常"语句(例如if),它将被解析为表达式语句,用于计算表达式。

因此,{} + {}被解析为两个语句(通过ASI):{}; +{}。第一个语句是一个空块;第二个语句是一元+运算符,它将对象强制为数字
将对象强制为数字包括调用toString()(返回"[object Object]"),然后将结果解析为数字(事实并非如此)
eval()然后返回该值作为最终语句的值。

节点将其REPL输入封装在()中,以强制将其解析为表达式:

  // First we attempt to eval as expression with parens.
  // This catches '{a : 1}' properly.
  self.eval('(' + evalCmd + ')',
相关文章: