Javascript 当值既不是数字也不是字符串类型时,Number()是否显式调用toString()?(例如功能)

Javascript 当值既不是数字也不是字符串类型时,Number()是否显式调用toString()?(例如功能),javascript,function,Javascript,Function,由于文档描述了parseInt()的这种行为,而不是作为函数调用的Number()构造函数,因此我想了解一下这是否可靠,以及是否有来自官方来源的引用。示例代码: let加法器=(函数(){ 设和=0 返回函数add(num){ 总和+=num add.toString=()=>sum//方法被覆盖以返回值 返回添加 } })() console.log(数字(加法器(5)(2)(3))/=>10参见。调用Number将调用带有参数的ToNumeric(value),该参数将调用 使用参数,该参

由于文档描述了parseInt()的这种行为,而不是作为函数调用的Number()构造函数,因此我想了解一下这是否可靠,以及是否有来自官方来源的引用。示例代码:

let加法器=(函数(){
设和=0
返回函数add(num){
总和+=num
add.toString=()=>sum//方法被覆盖以返回值
返回添加
}
})()
console.log(数字(加法器(5)(2)(3))/=>10
参见。调用
Number
将调用带有参数的
ToNumeric(value)
,该参数将调用 使用参数,该参数将(通常)调用 带参数和提示的
数字
,它执行以下操作:

  • 断言:类型(O)是对象。
  • 断言:提示是字符串或数字。
  • 如果提示是字符串,那么
  • 让方法名为«“toString”,“valueOf”»。
  • 否则,
  • 让方法名为«“valueOf”,“toString”»。
  • 对于方法名的每个元素名,让方法名为Get(O,name)。
  • 如果可以(方法)如果为true,则调用(方法,O)将结果设为true。
  • 如果Type(result)不是Object,则返回result。
  • 抛出TypeError异常
  • 因此,在将对象转换为数值原语的情况下,将首先尝试调用对象上的
    valueOf
    方法(如果存在)。如果这样的方法不存在,它将尝试调用对象上的
    toString
    方法

    是的,在
    valueOf
    不存在的情况下调用
    toString
    是可靠的

    演示如何首先调用
    valueOf
    的实时片段(如果存在):

    let加法器=(函数(){
    设和=0
    返回函数add(num){
    总和+=num
    add.toString=()=>{
    log('toString called');
    return sum;//方法被覆盖为返回值
    };
    add.valueOf=()=>{
    log('valueOf called');
    return sum;//方法被覆盖为返回值
    };
    返回添加
    }
    })()
    console.log(数字(加法器(5)(2)(3))/=>10