JavaScript Number()方法和ParseInt()/ParseFloat()方法的轉換機制

在項目開發中咱們常常會用到轉型方法,尤爲是JS這種鬆散型的語言。其中比較經常使用的方法就是Number()方法和ParseInt()/ParseFloat()方法了,下面咱們分別對這幾種方法的轉型機制進行詳細地說明。設計

Number()


  • 若是傳入的參數爲字符串,則遵循如下規則:code

    • 若是字符串中只包含數字,則返回相應的數字值(前導的0會被忽略)對象

    • 若是包含浮點和負號,則返回相應的小數或負數ip

    • 若是是16進制數字,則返回相應的10進制數開發

    • 若是包含空格,則開始和結束的空格會被忽略,若是中間包含空格則會返回NaN字符串

    • 若是是空字符串,則返回0console

    • 若是包含除去以上狀況的其它字符,則返回NaN程序設計

  • 若是傳入的參數爲true/false,則返回1/0程序

  • 若是傳入的參數爲null,則返回0方法

  • 若是傳入的參數爲undefined,則返回NaN

  • 若是是數字,則簡單的返回數字值

  • 若是是對象,則調用對象的valueOf()方法,將所得值按照以上規則進行轉型,若是獲得NaN,再調用對象的toString()方法,將所得的值按以上規則進行轉型

整體來講Number()方法的轉型機制比較複雜且難懂,通常咱們手動調用轉型方法會使用parseInt()/parseFloat()方法進行轉型,下面介紹這兩個方法的轉型機制。

parseInt()/parseFloat()


  • 若是傳入的參數爲字符串,則則從第0個位置開始,找到第一個非空格字符,若是第一個非空格字符不是數字或-號,則返回NaN,若是是數字或-號,則繼續往下尋找,直到找到非數字字符,而後忽略後面的內容,返回前面找到的數字值(前導的空格會被忽略,中間的空格則會當成非數字字符處理)

  • 若是是boolean,null,undefined類型值,則返回NaN

  • 若是須要對8進制或者16進制的數進行轉型,ECMAScript 3和ECMAScript 5有所不一樣,因此推薦傳入第二個參數,即進制數

  • 若是是對象,則調用對象的toString()方法,將所得值再按照以上方法進行轉型

  • *以上只說明瞭parseInt()方法的機制,parseFloat()方法與其只有一個區別,即parseFloat()方法遇到第一個浮點會繼續往下尋找

下面舉一些典型的例子,對以上機制進行驗證和說明

console.log(Number("12a"));      //NaN
console.log(Number(""));         //0
console.log(Number(null));       //0
console.log(Number(undefined));  //NaN
console.log(Number(true));       //1
console.log(Number(false));      //0
console.log(Number([]);          //0
console.log(parseInt("-1-2a"));  //-1
console.log(parseInt("-a2a"));   //NaN
console.log(parseInt(" 12a"));   //12
console.log(parseInt("1 2a"));   //1
console.log(parseInt(""));       //NaN
console.log(parseInt(null));     //NaN
console.log(parseInt(undefined));//NaN
console.log(parseInt(true));     //NaN
console.log(parseInt(false));    //NaN
console.log(parseInt([]));       //NaN

以上即是所總結的Number()和parseInt()/parseFloat()方法的轉型機制,特別說明:大部分規則摘自《JavaScript高級程序設計第三版》。

相關文章
相關標籤/搜索