Number()函數轉換規則如下:
轉換規則:
1)如果是Boolean值,true和false將分別轉換爲1和0。
2)如果是數字值,只是簡單的傳入和返回。
3)如果是null值,返回0。
4)如果是undefined,返回NaN。
5)如果是字符串,遵循下列規則:
如果是字符串中只包含數字(包括前面帶正號或負號的情況),則將其轉換爲十進制數值,即“1”變成1,“123”會變成123,而“011”會變成11(前導的零被忽略了);
如果字符串中包含有效的浮點格式,如“1.1”,則將其轉換爲對應的浮點數值(同樣也會忽略前導零);
如果字符串中包含有效的十六進制格式,例如"0xf",則將其他轉換爲相同大小的十進制整數值;
如果字符串是空的(不包含任何字符),則將其轉換爲0;
如果字符串中包含除上述格式之外的字符,則將其他轉換成NaN.
6)如果是對象,則調用對象的valueOf()方法,然後依照前面的規則轉換返回的值。如果轉換的結果是NaN(或者仍然不匹配前五條規則),則調用的對象的toString()方法,然後再次依照前面的規則轉換返回的字符串值。
(1) Number([]) == 0
[].valueOf() -> []
[].toString() -> ''
Number('') -> 0
(2)Number({}) == NaN
({}).valueOf() -> {}
({}).toString() -> '[object Object]'
Number('[object Object]') -> NaN