鍍金池/ 問答/HTML/ js中用Number函數(shù)對(duì)對(duì)象進(jìn)行數(shù)值轉(zhuǎn)換時(shí)的問題

js中用Number函數(shù)對(duì)對(duì)象進(jìn)行數(shù)值轉(zhuǎn)換時(shí)的問題

最近正在研究紅寶書,在數(shù)值轉(zhuǎn)換這里發(fā)現(xiàn)了一個(gè)問題,關(guān)于Number函數(shù)的。
書上是這么說的:
clipboard.png

然后我就這個(gè)說法在console里面寫了個(gè)test,代碼如下:

var obj = {
    valueOf:function(){
        return "abcd";
    },
    
    toString:function(){
        return 123;
    }
};
Number(obj);

以及返回的結(jié)果:

clipboard.png

然后問題來了,為什么返回的是NaN?按照書上說的,先調(diào)用對(duì)象的valueOf()
方法,將方法返回的值進(jìn)行數(shù)值轉(zhuǎn)換,然后判斷結(jié)果,如果是NaN則會(huì)繼續(xù)調(diào)用對(duì)象的toSting()方法,再將方法返回的值進(jìn)行數(shù)值轉(zhuǎn)換,得到最終結(jié)果應(yīng)該是123。但是最后返回的不是123而是NaN,這是為什么,是因?yàn)檫@個(gè)obj只是一個(gè)簡(jiǎn)單對(duì)象嗎?還是我這個(gè)例子沒寫對(duì)-_-!
向各位大佬請(qǐng)教!!

回答
編輯回答
失魂人

應(yīng)該是翻譯的問題,建議你多找?guī)妆緯鴮?duì)照著看一下。其次,這個(gè)問題沒有什么實(shí)際應(yīng)用場(chǎng)景,所以研究?jī)r(jià)值不大。

2017年3月5日 02:56
編輯回答
陪妳哭

這個(gè)問題以前有人問過,不廢話,轉(zhuǎn)鏈接https://segmentfault.com/q/10...

2018年6月29日 09:15
編輯回答
乖乖瀦
var obj = {
    
    toString:function(){
        return 123;
    }
};
Number(obj)

這才是你想要的效果
書上說的很清楚,如果是對(duì)象,調(diào)用valueof之后,你返回的是字符串,按照之前字符串處理,結(jié)果是NaN。
上面那個(gè)是對(duì)象,但是沒定義valueof所以是NaN,之后調(diào)用toString

2018年8月6日 12:01
編輯回答
焚音
var obj = {
    valueOf:function(){
        console.log(1)
        return "abcd";
    },
    
    toString:function(){
        console.log(2)
        return 123;
    }
};
Number(obj);

運(yùn)行上面的程序就可以知道,并沒有運(yùn)行對(duì)象的toString方法。
你可以對(duì)比下原文和翻譯看看差別在那。

If that conversion results in NaN, the toString() method is called and the rules for converting strings are applied.
2017年12月5日 13:49