如果obj.valueof()没有override,Number(obj)是否会进入死循环?

看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)会进入死循环?

阅读 1.5k
1 个回答

不会是死循环,将会返回NaN
对象隐式转换为Number是下面流程
第一步: 调用 valueOf(), 如果返回基本类型,按照基本类型转换规则。 不执行第二步
第二步: 调用 valueOf()返回的是自身,就调用toString,那么返回的字符串一般是"[object XXXX]"。 再对字符串进行基本规则转换,也就是 NaN
https://segmentfault.com/a/11...

推荐问题