为什么Node REPL没有给出与Wat视频或我的浏览器控制台相同的结果
Why does Node REPL not give the same results as Wat video or my browser console?
例如,在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 + ')',
相关文章:
- 当浏览器上的后退按钮到达主页时,我需要删除Class
- 如何使用特定大小的浏览器窗口打开我的页面
- 对于如何在没有modernizr的情况下用边界半径的功能检测检查来替换我的旧浏览器检查
- 我的时间倒计时脚本在谷歌浏览器中工作正常,但在其他浏览器中打开时它显示为南楠
- 如何确保在浏览我的plone网站时始终启用浏览器中的javascript
- 在我的浏览器中用类似ctrl+s的PhantomJS保存一个网站
- 跨浏览器问题:如何调试我的网站'在windows PC的safari上的行为
- 为什么这会造成一个无休止的循环并使我的浏览器崩溃
- 我可以让我的网站的内容可编辑区域对安卓股票浏览器上的触摸事件更敏感吗
- 转换链接在jsfiddle中有效,但在我的浏览器上无效
- 浏览器扩展程序来跟踪我的谷歌活动
- 为什么我的谷歌浏览器扩展程序在谷歌浏览器版本 41.0.2272.89 中不起作用
- 我的javascript适用于所有浏览器,但IE8除外
- 当用户关闭浏览器选项卡时,如何使用 PHP 或 javascript 从我的站点注销用户
- 为什么我的 cshtml 页面的 javascript 没有在浏览器中更新/刷新
- 为什么IE浏览器不喜欢我的点击事件
- 离子应用程序在浏览器上运行,但在我的安卓设备中无法正常工作
- jQuery在我的网站上不起作用,但在我的浏览器上起作用
- 如何在浏览器页面切换到我的网站选项卡时创建事件,如gmail中的聊天框状态更改
- 如果从我的网站在浏览器中安装了其他程序,如何在移动应用程序中打开共享对话框