3 回答

TA貢獻(xiàn)1998條經(jīng)驗 獲得超6個贊
你需要了解調(diào)用Number的時候,到底是怎么執(zhí)行的?
根據(jù)js規(guī)范,如果參數(shù)是對象,會首先把對象轉(zhuǎn)化為原始類型的數(shù)據(jù),那么怎么轉(zhuǎn)化為原始類型的數(shù)據(jù)呢?
比如
let a = {}
那么會首先調(diào)用a的valueOf方法,如果結(jié)果不是原始類型,那么調(diào)用toString方法:
a.valueOf()返回對象本身,不是原始類型,所以需要繼續(xù)調(diào)用toString方法;
a.toString()返回"[object Object]",是一個字符串,是原始類型,所以接下來會調(diào)用Number("[object Object]"),返回NaN;
所以你如果想返回數(shù)字,那個我們就可以通過修改轉(zhuǎn)化步驟中的返回值來改變結(jié)果,比如,可以修改valueOf的返回值:
let a = {}
a.valueOf = function () {return 2}
Number(a) // 2
或者修改toString的返回值:
let b = {}
b.toString = function () {return 3}
Number(b) // 3

TA貢獻(xiàn)1795條經(jīng)驗 獲得超7個贊
let flag = false;
Number(flag)
//0
let b = new Boolean(false);
b //Boolean {false}
Number(b)
//0
可以轉(zhuǎn)換的,會自動包裝與拆包(包裝類型) 默認(rèn) false -> 0 , true -> 1
不知道你問的是不是這個?不是的話,可以截個圖書上說的具體是啥,哪里沒明白
添加回答
舉報