Number()函數的轉換規則:
- 如果是Boolean值,true和false將被分別轉化為1和0;
console.log(Number(true)) //1
console.log(Number(false)) //0
-
如果是數字值,都會轉化為10進制返回;
- 十進制,只是簡單的傳入和返回
console.log(Number(13)) //13
- 八進制(八進制的第一位必須是0,然后是八進制數字序列(0~7),如果數值超出了范圍,那么前導0將被忽略,后面的值將被當作十進制處理)
console.log(Number(013)) //11 console.log(Number(079)) //79
- 十六進制(字面值的前兩位必須是0x,后面跟任何十六進制數字(0~9及A~F),其中,字母A~F可以大寫,也可以小寫。)
console.log(Number(0x1a)) //26 console.log(Number(0x79)) //121
如果是null,返回0;
console.log(Number(null)) //0
- 如果是undefined,返回NaN
console.log(Number(undefined)) //NaN
-
如果是字符串,則遵循下面的規則:
- 如果字符串中只飽含數字(包括前面帶正號和負號的情況),則將其轉化為十進制數值。
console.log(Number("1")); //1 console.log(Number("123")); //123 console.log(Number("011")); //11,注意前面的0被忽略了
- 如果字符串中包含有效的浮點格式,則將其轉化為對應的浮點格式(同樣,也會忽略前面的0)
console.log(Number("1.1")); //1.1 console.log(Number("0.123")); //.123
- 如果字符串中包含有效的十六進制格式,則將其轉化為相同大小的十進制整數值
console.log(Number("0x23")); //35
- 如果字符串是空的(不包含任何字符),則將其轉化為0
console.log(Number("")); //0
- 如果字符串中包含除上述之外的字符,則將其轉化為NaN
console.log(Number("Hello world")); //NaN
如果是對象,則調用對象的valueOf()方法,然后依照前面的規則轉化返回的值。如果被轉化的結果為NaN,則調用對象的toString()方法,然后再次依照前面的規則轉化返回的字符串值。