javascript高級程序設計學習之數值轉換 |Number(),parseInt(),parseFloat()

將非數值轉換成數值的函數有三個:Number(),parseInt(),parseFloat();javascript

小記tip:Number()能夠用於任何數據類型;parseInt(),parseFloat()針對的是將字符串;java

Number()的轉換規則以下:主要舉一些特殊例子;

第一類:null,undefined面試

console.log(Number(null)) //返回的是0
 console.log(Number(undefined)) //返回的是NaN;

第二類:字符串數組

/*************若是是字符串************/
        console.log(Number('-123')) //返回-123   //字符串只包含數字(包括字符串首個字符爲加減號),則將其轉換成十進制數字,而且若是首個字符爲0則會忽略
        console.log(Number('+123'))  //返回123
        console.log(Number('123'))  //返回123
        console.log(Number('0123'))  //返回123

        //若是字符串中包含有效的浮點格式,則相對應的轉換成對應的浮點數,和上述規則相似,首個字符爲o則忽略
        console.log(Number('01.2')) //返回1.2
        console.log(Number('1.2')) //返回1.2

        //若是字符串包含有效的十六進制數,則轉換成大小相同的十進制數
        console.log(Number('0xaf')) //返回175
        
        //若是字符串爲空,則返回0;
        console.log(Number('')) //0

        //除去以上格式以外,則返回NaN;
        console.log(Number('0120sd'))  //NaN

第三類:object 按照javascript高級程序設計(第三版),若是是對象,則調用對象的valueOf()方法,而後依照前面的規則轉換返回的值,若是轉換的結果爲NaN(非數值),則調用對象的toString()方法,而後依照前面的規則轉換返回的值;下面來直接看測試代碼:函數

var ary_=new Array('20',25);
        console.log(ary_.valueOf());//['20',25]; 數組的實例對象 ,非數值
        console.log(ary_.toString())//20,25 字符串
        console.log(Number(ary_))  //NaN

        var boolean=new Boolean(85)
        console.log(boolean.valueOf());//true
        console.log(boolean.toString())//字符串true
        console.log(Number(boolean))//1

        var date=new Date(2018,3,18)
        console.log(date.valueOf())  //1523980800000
        console.log(date.toString())  //Wed Apr 18 2018 00:00:00 GMT+0800 (中國標準時間)
        console.log(Number(date))  //1523980800000

        function test(){
            this.name='zh';
        }
        console.log(test.valueOf())//返回函數自己,非數值
        console.log(test.toString())//返回函數的字符串形式
        console.log(Number(test))//NaN

        var num=new Number(52);
        console.log(num.valueOf())//數值52
        console.log(num.toString())//字符串‘52’
        console.log(Number(num))//數值52

        var obj={
            "name":"zh",
            "age":"25",
            "salary":20000
        }
        console.log(obj.valueOf());//返回自己,非數值
        console.log(obj.toString());//[object Object] 字符串
        console.log(Number(obj))  //NaN

        var str=new String('sdsf52');
        console.log(str.valueOf())//'sdsf52' ,字符串的值
        console.log(str.toString())
        console.log(Number(str))//NaN

parseInt()轉換規則

輸入圖片說明

tip:1:忽略字符串前面的空格,從第一個字符,若是第一個字符串不是數字字符或者負號,該函數就會返回NaN,一直解析到最後一個字符。若是中途遇到一個非數字的字符,則就會中止,例如parseInt('2025zh526'),返回的2025測試

tip2:parseInt()會識別整數的格式,是十進制仍是八進制亦或十六進制;以0x開頭的,而且後面是數字的爲 十六進制;以0開頭後面是數字的爲八進制;可是在ECMAScript 5 js引擎下,parseInt()不具備解析八進制的能力,例如parseInt('050');返回的是50;this

tip3:爲了消除上述的困惑,parseInt()提供第二個參數,來肯定是按照那種進制解析字符串,見以下例子.net

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()轉換規則

tip1:parseFloat()只解析十進制值;code

tip2:忽略字符串前面的空格,從第一個字符(若是第一個字符爲0則會忽略),一直解析到字符串的尾部,直到解析到一個無效的浮點數字符爲止,字符串的第一個小數點是有效的,第二個爲無效,第二個小數點後面的字符會被忽略,下面見幾個特殊的例子。

tip3:字符串包含一個整數,或者小數點後面都是0,則返回整數

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'))//52
        console.log(parseFloat('052.12.68'))//52.12
        console.log(parseFloat(''))//NaN
相關文章
相關標籤/搜索