首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Number([])返回0,而Number({})返回NaN?

问为什么Number([])返回0,而Number({})返回NaN?
EN

Stack Overflow用户
提问于 2021-09-15 01:25:07
回答 1查看 67关注 0票数 2

在我看来,Number构造函数将调用String([]),因此Number([])等于Number("")。所以它返回0。此外,Number构造函数将调用String({}),因此Number({})等于Number("[object Object]")。所以它返回NaN。但我不确定。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-15 01:53:39

是的,你是对的。

number构造函数在其参数上调用will call ToNumeric,然后在其上调用ToNumber,后者使用Number提示调用对象上的ToPrimitive,这导致OrdinaryToPrimitive被调用,该函数

代码语言:javascript
复制
1. If hint is string, then
  a. Let methodNames be « "toString", "valueOf" ».
2. Else,
  a. Let methodNames be « "valueOf", "toString" ».
3. For each element name of methodNames, do
  a. Let method be ? Get(O, name).
  b. If IsCallable(method) is true, then
    i. Let result be ? Call(method, O).
    ii. If Type(result) is not Object, return result.

提示是number,所以调用的方法名称首先是valueOf,然后是toString (如果不存在)。

如果是普通对象,则valueOf返回对象本身,如果是数组,则返回数组本身,因此这是没有帮助的-它将转移到toString。

Array.prototype.toString返回已联接的数组值- arr.toString()等同于arr.join(',')。空数组加入到空字符串中。所以

代码语言:javascript
复制
Number([])

变成了

代码语言:javascript
复制
Number('')

因此,空字符串变成了0。

但是,当对对象调用toString时,会给出[object Object]

​

代码语言:javascript
复制
console.log({}.toString());

​

它不能被强制转换成一个数字,因此是NaN。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69186099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档