鍍金池/ 問答/HTML/ Js中的對象轉(zhuǎn)換為數(shù)值類型時是不是返回結(jié)果都是NaN?

Js中的對象轉(zhuǎn)換為數(shù)值類型時是不是返回結(jié)果都是NaN?

打錯了函數(shù),sorry...

1、看到Js高程第三章Number()函數(shù)轉(zhuǎn)換對象為數(shù)值時沒看懂。
2、然后我嘗試了一下用Number()函數(shù)轉(zhuǎn)換對象為數(shù)值時,結(jié)果都是NaN。
3、所以如果有可以轉(zhuǎn)換為數(shù)值類型的對象請舉例,萬分感謝解惑。

回答
編輯回答
耍太極

let flag = false;
Number(flag)
//0

let b = new Boolean(false);
b //Boolean?{false}
Number(b)
//0

可以轉(zhuǎn)換的,會自動包裝與拆包(包裝類型) 默認 false -> 0 , true -> 1

不知道你問的是不是這個?不是的話,可以截個圖書上說的具體是啥,哪里沒明白

2017年3月24日 04:55
編輯回答
吃藕丑

你需要了解調(diào)用Number的時候,到底是怎么執(zhí)行的?
根據(jù)js規(guī)范,如果參數(shù)是對象,會首先把對象轉(zhuǎn)化為原始類型的數(shù)據(jù),那么怎么轉(zhuǎn)化為原始類型的數(shù)據(jù)呢?
比如

let a = {}

那么會首先調(diào)用avalueOf方法,如果結(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

參考鏈接

  1. 規(guī)范
2017年8月4日 17:25
編輯回答
傲嬌范

說 ES5.1,
Number 會對參數(shù)進行toNumber的操作, toNumber的返回值如下

undefined -> NaN
Null      -> +0
true      -> 1
false     -> +0
Number    -> argument
String    -> 根據(jù)字面量語法解析字符串為數(shù)字
Object    -> { var primValue = ToPrimitive(argument,"number"); 
               return toNumber(value);}

至于toPrimitive 我用 JS 實現(xiàn)一個給你看唄:http://zonxin.github.io/post/...

2017年7月31日 10:14