V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
rabbbit
V2EX  ›  JavaScript

求解,关于 Number()函数

  •  
  •   rabbbit · 2018-03-31 16:44:57 +08:00 · 2435 次点击
    这是一个创建于 2455 天前的主题,其中的信息可能已经有所发展或是发生改变。

    下边这段函数调用为什么返回 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').是我哪里写错了 /理解错了吗?

    iLionel
        1
    iLionel  
       2018-03-31 17:04:40 +08:00   ❤️ 2
    是在调用 valueOf 没有返回“基本类型值”之后,才会继续调用 toString
    iLionel
        3
    iLionel  
       2018-03-31 17:08:59 +08:00
    https://es5.github.io/#x8.12.8 感觉这个会更清楚一点
    @luckyscript
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1602 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:52 · PVG 00:52 · LAX 08:52 · JFK 11:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.