數據類型總結——Number(數值類型)


相關文章

  簡書原文:https://www.jianshu.com/p/9fb573ef10da

  數據類型總結——概述:https://www.cnblogs.com/shcrk/p/9266015.html

  數據類型總結——String(字符串類型):https://www.cnblogs.com/shcrk/p/9277107.html

  數據類型總結——Number(數值類型):https://www.cnblogs.com/shcrk/p/9277040.html

  數據類型總結——Boolean類型(布爾類型):https://www.cnblogs.com/shcrk/p/9265597.html

  數據類型總結——null和undefined:https://www.cnblogs.com/shcrk/p/9266100.html

  數據類型總結——基本包裝類型:https://www.cnblogs.com/shcrk/p/9266066.html

  數據類型總結——Array(數組類型):https://www.cnblogs.com/shcrk/p/9276989.html

大綱

  前言
  1、Number(數值類型)的相關概念
  2、Number相關的方法
  3、數據類型轉換
  4、關於NaN

前言

  數據類型是每一種語言都需要掌握的內容,掌握每一種數據類型的使用是掌握這門語言必不可少的。而我也對數據類型寫了一系列的博客,其中包含了對某一數據類型的概念的認識和理解以及常使用的方法。以下就是我對Number類型的一些認識和理解,希望能對讀者有所幫助。並且這是關於ES6之前的一篇,之后還會有一篇關於ES6對數值類型的新增的知識的總結。

1、Number(數值類型)的相關概念

  1、Number類型包括整數和浮點數。
  2、數字字面量有十進制、八進制、十六進制

var num1 = 56;      //十進制整數56
var num2 = 070;     //八進制的56,前綴為0
var num2 = 079;     //八進制56的錯誤表示,9超過了8,前面的0被忽略,解析成十進制,即:79
var num4 = 0x56;    //十六進制的56,前綴為0x

  3、在進行算術計算時,所有的八進制和十六進制的數值最終都將被轉換成十進制數值。
  4、數值范圍。

//Number.MIN_VALUE:5e-324
//Number.MAX_VALUE:1.7976931348623157e+308
//如果超出了這個范圍,則是Infinity或者-Infinity即:Number.NEGATIVE_INFINITY
//或者Number.POSITIVE_INFINITY
//可以使用isFinite()函數來判斷是否是無窮,如果不是無窮則返回true
console.log(isFinite(56));//true

2、Number相關的方法

2.1、toString()

  toString() 把數字轉換成指定進制形式的字符串。

var  num = 10; // 十進制 
console.log("十進制:"+num.toString());//十進制:10
console.log("二進制:"+num.toString(2)); //二進制:1010
console.log("八進制:"+num.toString(8)); //八進制:12
console.log("十六進制:"+num.toString(16)); //十六進制:a
console.log("三進制:"+num.toString(3));   //三進制:101

2.2、toFixed(num)

/*
  NumberObject.toFixed(num)
  把number數轉換成一個十進制數形式的字符串。可選參數控制其小數點后的數字位數。
  它的值必須在0~20之間,默認為0,例如:
  可根據傳入的參數保留小數點后幾位
  toFixed()方法是在JavaScript1.5和JScript5.5中加入的,因此僅被Netscape6+
  和IE5.5+瀏覽器支持
  toFixed()在截取小數點后幾位數的時候會進行四舍五入。
*/
var num = new Number(13.37);
console.log(num.toFixed(1));//13.4

2.3、toExponential()

/*
  Number.toExponential(fractionDigits)
  把number轉換成一個指數形式的字符串。可選參數控制其小數點后的數字位數。
  它必須在0~20之間。
*/
document.writeln(Math.PI.toExponential(0));//3e+0
document.writeln(Math.PI.toExponential(2));//3.14e+0
document.writeln(Math.PI.toExponential(7));//3.1415927e+0
document.writeln(Math.PI.toExponential(16));//3.1415926535897930e+0
document.writeln(Math.PI.toExponential(  ));//3.141592653589793e+0

2.4、toPrecision()

/*
  number.toPrecision(precision)
  返回固定大小格式(fixed),會根據傳入的數值分別用toFixed()或者toExponential()方
  法返回指定位數的字符串表示(不包括指數部分)
  把這個number轉化為一個十進制形式的字符串。可選參數控制字符精度,
  它的精度必須在0~21之間。例如:
*/
document.writeln(Math.PI.toPrecision(2));//3.1
document.writeln(Math.PI.toPrecision(7));//3.141593
document.writeln(Math.PI.toPrecision(16));//3.141592653589793
document.writeln(Math.PI.toPrecision(  ));//3.141592653589793

3、數據類型轉換

3.1、Number()

/*
Number()函數的轉換規則如下:
  如果是Boolean值,true和false將分別轉換成0和1
  如果是數字,只是簡單的傳入和返回
  如果是null,返回0
  如果是undefined,返回NaN
  如果是NaN,返回NaN
  如果是字符串,則
      如果字符串中只包含數字(包括前面帶正號或負號的情況),則將其裝換成對應的十進制數字
      如果字符串中包含浮點格式的數字,轉換成對應的浮點數
      如果字符串中包含十六進制0xf,則會轉換為相同大小的十進制數值即15
      如果字符串 是空的(不包含任何字符),則將其轉換成0
      如果字符串中包含除了上述格式之外的字符,則將其轉換為NaN
  如果是對象,則調用對象的valueOf()方法,然后依照前面的規則返回的值,如果轉換
的結果是NaN,則調用對象的toString()方法,然后再按照前面的規則轉換返回的字符串的值
*/
console.log(Number(true));                        //1
console.log(Number(2));                           //2
console.log(Number(null));                        //0
console.log(Number(undefined));                   //NaN
console.log(Number(NaN));                         //NaN
console.log(Number(''));                          //0
console.log(Number(' '));                         //0
console.log(Number('2'));                         //2
console.log(Number('02'));                        //2
console.log(Number('020'));                       //20
console.log(Number('0xf'));                       //15
console.log(Number('2a'));                        //NaN
console.log(Number('a2'));                        //NaN
console.log(Number('bule'));                      //NaN
console.log(Number(null));                        //0

3.1、parseInt()方法和parseFloat()

  由於Number()函數在轉換字符串比較復雜而且不夠合理,因此常用parseInt()方法和parseFloat()方法來處理字符串和數值之間的轉換。parseInt()函數在轉換字符串的時候,更多看的是其是否符合數值模式,它會忽略字符串前面的空格,直至找到第一個非空格的字符。

/*
    如果第一個字符不是數字字符或者符號,parseInt()就會返回NaN;也就是說,
用parseInt()轉換空字符串會返回NaN(Number()對空字符返回0)。
    parseInt方法如果接收的字符串含有非數字的字符,那么parseInt方法會從字符串的首個
字符開始尋找,一直找到非數字字符為止,然后就把前面的數字字符轉換成數字
    parseInt() 方法首先查看位置 0 處的字符,判斷它是否是個有效數字;如果不是,該方
法將返回 NaN,不再繼續執行其他操作。但如果該字符是有效數字,該方法將查看位置 1 處的
字符,進行同樣的測試。這一過程將持續到發現非有效數字的字符為止,此時 parseInt() 將
把該字符之前的字符串轉換成數字。
    parseInt()也能解析各種整數格式,如十六進制、八進制等(但是ES5不具備了解析
八進制的能力了,因為ES5認為八進制是無效的)
*/
console.log(parseInt(1));                  //1
console.log(parseInt(''));                  //NaN
console.log(parseInt(' '));                  //NaN
console.log(parseInt('1'));                  //1
console.log(parseInt('a1'));                  //NaN
console.log(parseInt('1a'));                  //1
console.log(parseInt('070'));                  //70
console.log(parseInt('70'));                  //70
console.log(parseInt('0xf'));                  //15(0x表示16進制)

/*
  parseInt()提供了第二個參數,轉換是使用的基數(即多少進制)(基模式),如果要解析的
值是八進制的字符串,則指定基數8作為第二個參數,可以保證得到正確的結果。
  不指定基數的情況下,意味着讓parseInt()決定如何解析輸入的字符串,因此為了避免錯誤
的解析,我們建議無論什么情況下都明確指定基數。
  多數情況下,我們要解析的都是十進制數值,因此始終將10作為第二個參數是非常必要的。
*/
console.log(parseInt('070'));                  //70
console.log(parseInt('070',8));                //56
console.log(parseInt('70'));                  //70

4、關於NaN

  1、Number.NaN:NaN是一個特殊的數值,NaN即非數值(Not a Number),這個數值用於本來要返回數值的操作數未返回數值的情況(這樣就不會拋出錯誤了)。
  2、NaN本身有兩個非同尋常的特點。
    首先,任何涉及NaN的操作,如NaN/10都會返回NaN,這個特點在多步計算中有可能會導致問題,但是同樣也解決了如果出現任何數值/0會拋出錯誤,停止代碼執行這樣的情況。其次,NaN與任何值都不相等,包括NaN本身。
  3、可以通過isNaN()方法來判斷某個數值是否是NaN這個特殊的數。
使用isNaN()方法會將傳入的數值如果是非數值的會將其自動轉換成數值類型,若能轉換成數值類型,那么這個函數返回false,若不能轉換成數值類型,則這個數就是NaN,即返回true。
  4、isNaN()方法確實適用於對象,在基於對象的調用時,會首先調用對象的valueOf()方法,然后確定該返回的數值能否轉換成數值,如果不能,則基於這個返回值再調用toString()方法,再測試返回值。而這個過程也是ECMAScript中內置的函數和操作符的一般執行流程。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM