为什么{} - 1在浏览器JavaScript中给出-1结果?

根据我对类型强制在这里如何工作的理解,第一个valueOf()将在{}上被调用,这不是原始值,因此将调用下一个toString(),这给出了[object Object].这将得到'[object Object]' - 1,即NaN,但实际上结果是-1.

根据我的理解,在 node 中,这似乎是有效的,因为结果是NaN在那里.

推荐答案

在控制台中,由于相关原因,{} - 1的判断就像您输入的那样

  {
    // no statements
  }
  -1;

这是一个块声明,后面跟着表达-1.

如果您输入({} - 1)以强制计算为表达,则会得到NaN.

控制台REPL不仅仅是一个表达判断器;它try 判断和运行您输入的任何内容,作为一个陈述序列.以{开头的陈述始终被消除为陈述块的开始,而不是对象初始化器.

Javascript相关问答推荐

在JavaScript中,是否有一种方法可以创建自定义thable,在等待某些代码后自动触发它?

React存档iframe点击行为

使用JavaScript在ionic Web应用程序中更新.pane和.view的背景 colored颜色

我开始使用/url?q=使用Cheerio

为什么当我解析一个promise时,输出处于挂起状态?

如何在Javascript中使用Go和检索本地托管Apache Arrow Flight服务器?

为什么Mutations 观察器用微任务队列而不是macrotask队列处理?

如何根据当前打开的BottomTab Screeb动态加载React组件?

我的角模板订阅后不刷新'

如何控制Reaction路由加载器中的错误状态?

如果Arrow函数返回函数,而不是为useEffect返回NULL,则会出现错误

使用原型判断对象是否为类的实例

为什么123[';toString';].long返回1?

更改预请求脚本中重用的JSON主体变量- Postman

如何将数据块添加到d3力有向图中?

当我在Reaction中创建一个输入列表时,我的输入行为异常

是否可以将异步调用与useState(UnctionName)一起使用

FindByIdAndUpdate在嵌套对象中创建_id

更改管线时不渲染组件的react

无法在Adyen自定义卡安全字段创建中使用自定义占位符