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