鍍金池/ 問答/HTML/ 如果obj.valueof()沒有override,Number(obj)是否會

如果obj.valueof()沒有override,Number(obj)是否會進(jìn)入死循環(huán)?

看JS紅皮書,對Number(obj)的描述是:
先調(diào)用obj.valueOf(), 如果obj.valueOf()屬于任一基本類型,就再根據(jù)規(guī)則轉(zhuǎn)換。 如果obj.valueOf()的結(jié)果是NaN,就會調(diào)用obj.toString()方法

同時obj.valueof()有描述:
語法:obj.valueOf() // 這里的obj是任意對象,不單指 Object
作用:將對象 obj 轉(zhuǎn)化為原始類型的值,這個方法通常需要重寫(override)。
自定義對象在未重寫 valueOf() 的情況下,valueOf() 會返回對象自身。

如果obj.valueof()沒有被override,那么就會返回自身。

疑問:Number(objNotOverrideValueOf)會進(jìn)入死循環(huán)?

回答
編輯回答
局外人

不會是死循環(huán),將會返回NaN
對象隱式轉(zhuǎn)換為Number是下面流程
第一步: 調(diào)用 valueOf(), 如果返回基本類型,按照基本類型轉(zhuǎn)換規(guī)則。 不執(zhí)行第二步
第二步: 調(diào)用 valueOf()返回的是自身,就調(diào)用toString,那么返回的字符串一般是"[object XXXX]"。 再對字符串進(jìn)行基本規(guī)則轉(zhuǎn)換,也就是 NaN
https://segmentfault.com/a/11...

2017年1月16日 16:08