看JS红皮书,对Number(obj)的描述是:
先调用obj.valueOf(), 如果obj.valueOf()属于任一基本类型,就再根据规则转换。 如果obj.valueOf()的结果是NaN,就会调用obj.toString()方法
同时obj.valueof()有描述:
语法:obj.valueOf() // 这里的obj是任意对象,不单指 Object
作用:将对象 obj 转化为原始类型的值,这个方法通常需要重写(override)。
自定义对象在未重写 valueOf() 的情况下,valueOf() 会返回对象自身。
如果obj.valueof()没有被override,那么就会返回自身。
疑问:Number(objNotOverrideValueOf)会进入死循环?
不会是死循环,将会返回NaN
对象
隐式转换为Number
是下面流程第一步: 调用
valueOf()
, 如果返回基本类型,按照基本类型转换规则。 不执行第二步第二步: 调用
valueOf()
返回的是自身,就调用toString
,那么返回的字符串一般是"[object XXXX]"
。 再对字符串进行基本规则转换,也就是NaN
https://segmentfault.com/a/11...