javascript
javascript高级程序设计学习之数值转换 |Number(),parseInt(),parseFloat()
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
將非數(shù)值轉(zhuǎn)換成數(shù)值的函數(shù)有三個:Number(),parseInt(),parseFloat();
小記tip:Number()可以用于任何數(shù)據(jù)類型;parseInt(),parseFloat()針對的是將字符串;
Number()的轉(zhuǎn)換規(guī)則如下:主要舉一些特殊例子;
第一類:null,undefined
console.log(Number(null)) //返回的是0console.log(Number(undefined)) //返回的是NaN;第二類:字符串
/*************如果是字符串************/console.log(Number('-123')) //返回-123 //字符串只包含數(shù)字(包括字符串首個字符為加減號),則將其轉(zhuǎn)換成十進制數(shù)字,并且如果首個字符為0則會忽略console.log(Number('+123')) //返回123console.log(Number('123')) //返回123console.log(Number('0123')) //返回123//如果字符串中包含有效的浮點格式,則相對應(yīng)的轉(zhuǎn)換成對應(yīng)的浮點數(shù),和上述規(guī)則類似,首個字符為o則忽略console.log(Number('01.2')) //返回1.2console.log(Number('1.2')) //返回1.2//如果字符串包含有效的十六進制數(shù),則轉(zhuǎn)換成大小相同的十進制數(shù)console.log(Number('0xaf')) //返回175//如果字符串為空,則返回0;console.log(Number('')) //0//除去以上格式之外,則返回NaN;console.log(Number('0120sd')) //NaN第三類:object 按照javascript高級程序設(shè)計(第三版),如果是對象,則調(diào)用對象的valueOf()方法,然后依照前面的規(guī)則轉(zhuǎn)換返回的值,如果轉(zhuǎn)換的結(jié)果為NaN(非數(shù)值),則調(diào)用對象的toString()方法,然后依照前面的規(guī)則轉(zhuǎn)換返回的值;下面來直接看測試代碼:
var ary_=new Array('20',25);console.log(ary_.valueOf());//['20',25]; 數(shù)組的實例對象 ,非數(shù)值console.log(ary_.toString())//20,25 字符串console.log(Number(ary_)) //NaNvar boolean=new Boolean(85)console.log(boolean.valueOf());//trueconsole.log(boolean.toString())//字符串trueconsole.log(Number(boolean))//1var date=new Date(2018,3,18)console.log(date.valueOf()) //1523980800000console.log(date.toString()) //Wed Apr 18 2018 00:00:00 GMT+0800 (中國標準時間)console.log(Number(date)) //1523980800000function test(){this.name='zh';}console.log(test.valueOf())//返回函數(shù)本身,非數(shù)值console.log(test.toString())//返回函數(shù)的字符串形式console.log(Number(test))//NaNvar num=new Number(52);console.log(num.valueOf())//數(shù)值52console.log(num.toString())//字符串‘52’console.log(Number(num))//數(shù)值52var obj={"name":"zh","age":"25","salary":20000}console.log(obj.valueOf());//返回本身,非數(shù)值console.log(obj.toString());//[object Object] 字符串console.log(Number(obj)) //NaNvar str=new String('sdsf52');console.log(str.valueOf())//'sdsf52' ,字符串的值console.log(str.toString())console.log(Number(str))//NaNparseInt()轉(zhuǎn)換規(guī)則
tip:1:忽略字符串前面的空格,從第一個字符,如果第一個字符串不是數(shù)字字符或者負號,該函數(shù)就會返回NaN,一直解析到最后一個字符。如果中途遇到一個非數(shù)字的字符,則就會停止,例如parseInt('2025zh526'),返回的2025
tip2:parseInt()會識別整數(shù)的格式,是十進制還是八進制亦或十六進制;以0x開頭的,并且后面是數(shù)字的為 十六進制;以0開頭后面是數(shù)字的為八進制;但是在ECMAScript 5 js引擎下,parseInt()不具有解析八進制的能力,例如parseInt('050');返回的是50;
tip3:為了消除上述的困惑,parseInt()提供第二個參數(shù),來確定是按照那種進制解析字符串,見如下例子
console.log(parseInt('ad')) //NaN console.log(parseInt('ad',16)) //173 console.log(parseInt('10',8)) //8 console.log(parseInt('10',12)) //12 console.log(parseInt('11',12)) //13 -->12+1 console.log(parseInt('3',2)) //NaN["1","2","3"].map(parseInt) 面試題解惑
parseFloat()轉(zhuǎn)換規(guī)則
tip1:parseFloat()只解析十進制值;
tip2:忽略字符串前面的空格,從第一個字符(如果第一個字符為0則會忽略),一直解析到字符串的尾部,直到解析到一個無效的浮點數(shù)字符為止,字符串的第一個小數(shù)點是有效的,第二個為無效,第二個小數(shù)點后面的字符會被忽略,下面見幾個特殊的例子。
tip3:字符串包含一個整數(shù),或者小數(shù)點后面都是0,則返回整數(shù)
console.log(parseFloat('0dsfa'))//0;console.log(parseFloat('0xaf'))//0;console.log(parseFloat('052dsfa'))//52;console.log(parseFloat('dsd0dsfa'))//NaN;console.log(parseFloat('520'))//520;console.log(parseFloat('3.14e5'))//314000;console.log(parseFloat('052.0'))//52console.log(parseFloat('052.12.68'))//52.12console.log(parseFloat(''))//NaN轉(zhuǎn)載于:https://my.oschina.net/u/3407699/blog/1645043
總結(jié)
以上是生活随笔為你收集整理的javascript高级程序设计学习之数值转换 |Number(),parseInt(),parseFloat()的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设置电子围栏 高德地图_地理围栏-辅助功
- 下一篇: gradle idea java ssm