求解,关于 Number()函数

2018-03-31 16:44:57 +08:00
 rabbbit

下边这段函数调用为什么返回 NaN,而不是 2?

Number({
    valueOf:function(){return 'a'},
    toString:function(){return '2'}
}) // NaN

关于 Number(),js 高级程序设计有这么一段话:

如果是对象,则调用对象的 valueOf() 方法,然后依照前面的规则转换返回的值。
如果转换的结果是 NaN,则调用对象的 toString() 方法,然后再次依照前面的规则转换返回的字符串值。

依照上文,Number 函数应该先调用对象的 valueOf,获取到返回值'a'.因为 Number('a')的转换结果是 NaN, 所以继续调用 toString 方法,最终返回 Number('2').是我哪里写错了 /理解错了吗?

2422 次点击
所在节点    JavaScript
3 条回复
iLionel
2018-03-31 17:04:40 +08:00
是在调用 valueOf 没有返回“基本类型值”之后,才会继续调用 toString
luckyscript
2018-03-31 17:06:34 +08:00
iLionel
2018-03-31 17:08:59 +08:00
https://es5.github.io/#x8.12.8 感觉这个会更清楚一点
@luckyscript

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/443153

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX