为了账号安全,请及时绑定邮箱和手机立即绑定

Js中的对象转换为数值类型时是不是返回结果都是NaN?

Js中的对象转换为数值类型时是不是返回结果都是NaN?

红颜莎娜 2019-03-28 22:19:12
打错了函数,sorry...1、看到Js高程第三章Number()函数转换对象为数值时没看懂。2、然后我尝试了一下用Number()函数转换对象为数值时,结果都是NaN。3、所以如果有可以转换为数值类型的对象请举例,万分感谢解惑。
查看完整描述

3 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

你需要了解调用Number的时候,到底是怎么执行的?

根据js规范,如果参数是对象,会首先把对象转化为原始类型的数据,那么怎么转化为原始类型的数据呢?

比如


let a = {}

那么会首先调用a的valueOf方法,如果结果不是原始类型,那么调用toString方法:

a.valueOf()返回对象本身,不是原始类型,所以需要继续调用toString方法;

a.toString()返回"[object Object]",是一个字符串,是原始类型,所以接下来会调用Number("[object Object]"),返回NaN;


所以你如果想返回数字,那个我们就可以通过修改转化步骤中的返回值来改变结果,比如,可以修改valueOf的返回值:


let a = {}

a.valueOf = function () {return 2}

Number(a) // 2

或者修改toString的返回值:


let b = {}

b.toString = function () {return 3}

Number(b) // 3


查看完整回答
反对 回复 2019-04-01
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

let flag = false;
Number(flag)
//0

let b = new Boolean(false);
b //Boolean {false}
Number(b)
//0

可以转换的,会自动包装与拆包(包装类型) 默认 false -> 0 , true -> 1

不知道你问的是不是这个?不是的话,可以截个图书上说的具体是啥,哪里没明白


查看完整回答
反对 回复 2019-04-01
  • 3 回答
  • 0 关注
  • 561 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信