數據類型-Number

Number有 整數 、浮點數值Nan之分。編程

整數基本的數值字面量格式是十進制,還有八進制和十六進制編程語言

十進制能夠直接輸入:函數

var intNum=55;//整數

八進制第一位必須是0,而後是八進制數字序列(0~7),若是字面值的數值超出了範圍,那麼前導0將被忽略,後面的數值將被看成十進制數值解析。以下例子:spa

var octalNum1=070;//八進制的56

var octalNum2=079;//數值9在八進制中是無效的,所以會被解析爲79

var octalNum3=08;//無效的八進制,會被解析爲8

注意:八進制字面量在嚴格模式下面是無效的,會拋出錯誤!code

十六進制字面量的前兩位必須是0x,後面跟任何的十六進制數字(0~9及A~F),字母能夠大寫或小寫。以下例子:對象

var hexNum1=0xA;//十六進制的10

var hexNum2=0x1f;//十六進制的31

在進行計算時,全部的八進制和十六進制表示的數值最終都被轉換成十進制數值。blog

浮點數值就是該數值中必須包含一個小數點,而且小數點後面必須只有一位數字。小數點前可沒有數字,但不推薦。例如:ip

var floatNum1=1.1;

var floatNum2=0.1;

var floatNum3=.1;//不推薦

浮點數值對於極大或極小的數值,能夠用e來表示(即科學計數法)。用e表示法表示的數值等於e前面的數值乘以10的指數次冪。例如:內存

var floatNum1=3.125e7;//等於31250000

var floatNum2=3.125e-7;//等於-31250000

浮點數值的最高精度是17位小數,但在計算的時候會有在特殊組合的計算方式上會有偏差,例如:字符串

0.1+0.2=0.30000000000000004;//並非0.3

因爲內存限制,ECMAScript並不能保存世界上全部的數值。ECMAScript可以表示的最小數值保存在Number.MIN_VALUE中,這個值是5e-324;可以表示最大數值保存在Number.MAX_VALUE中,這個值是1.7976931348623157e+308。若是某次計算的結果獲得了一個超出Javascript數值範圍的值,那麼這個數值將被自動轉換成特殊的Infinity值。若是這個數值是負數,則會被轉成-Infinity(負無窮),若是這個數值是正數,則會被轉成Infinity(正無窮)。
函數isFinite()可檢測是否超過範圍,例:

var result=Number.MAX_VALUE+Number.MIN_VALUE;

alert(isFinite(result));//true

 

NaN,非數值(Not a Number)是一個特殊的數值,這個數值用於表示一個原本要返回數值的操做數未返回數值的狀況(這樣就不會拋出錯誤了)。例如在其餘的編程語言中,任何數值除以0都會致使錯誤,從而中止代碼執行。可是在ECMAScript中,任何數值除以0會返回NaN,所以不會影響其餘的代碼執行。
NaN自己有兩個非同尋常的特色。

首先,任何涉及NaN的操做(例:NaN/10)都會返回NaN,這個特色在多步計算中可能致使問題。

其次,NaN與任何值都不相等,包括NaN自己。例如:

alert(NaN==NaN);//fales

針對這兩個特色,ECMAScript定義了isNaN()函數。這個函數接受一個參數,該參數能夠是任何類型,而函數會幫咱們肯定這個參數是否「不是數值」。isNaN()在接收到一個值以後,會嘗試將這個數值轉換爲數值。某些不是數值的值會直接轉換爲數值,例如字符竄「10」或Boolean值。而任何不能被轉換爲數值的值都會致使這個函數返回true。例如:

alert(isNaN(NaN));//true

alert(isNaN(10));//false(10是一個數值)

alert(isNaN("10"));//false(能夠被轉換成數值10)

alert(isNaN("blue));//true

alert(isNaN(true));//false(true能夠轉換成數值1)


有三個函數能夠把非數值轉換爲數值:Number(),pareseInt()和pareseFloat()。

Number()能夠用於任何數據類型。

而parseInt()和parseFloat()則專門用於把字符竄轉換成數值。

  Number()函數的轉換規則以下:

    •若是是Boolean值,true和false將分別被轉換爲1和0。

    •若是是數字值,只是簡單的穿任何返回。

    •若是是null值,返回0。

    •若是是undefined,返回NaN。

    •若是是字符串,則遵循下列規則:

      1.若是字符串中只包含數字(包括前面帶正號或負號的狀況),則將其轉換爲十進制數值,即「1」會變成1,「123」會變成123,而「011」會變成                        11;

      2.若是字符串中包含有效的浮點格式,如「1.1」,則將其轉換爲對應的浮點數值(一樣,也會忽略前導);

      3.若是字符串中包含有效的十六進制格式,例如「0xf」,則將其轉換爲相同大小的十進制整數數值;

      4.若是字符串是空的(不包含任何數字),則將其轉換爲0;

    •若是是對象,則調用對象的toString()方法,而後依照前面的規則轉換返回額值。若是轉換的結果是NaN,則對象的toString()方法,而後再次依照恰          面的規則轉換返回的字符串值。

      5.若是字符竄中包含除上述格式以外的字符,則將其轉換爲NaN。

  根據規則看以下例子: 

    var num1=Number("hello word");//NaN

    var num2=Number("");//0

    var num3=Number("0000011");//11

    var num4=Number("ture");//1

  parseInt()它會忽略字符串前面的空格,直到找到第一個個非空格字符。若是第一個字符不是數字字符或者負號,就會返回NaN。

  parseInt()也可以識別出各類整數格式(十進制,八進制和十六進制)。就由於這樣能夠識,咱們應該給指定第二個參數指明是多少進制。例如:

    var num1=parseInt("AF",16);//按十六進制解析,175

    var num2=parseInt("10",2);//按二進制解析,2

    var num3=parseInt("10",8);//按八進制解析,8

    var num4=parseInt("10",10);//按十進制解析,10

    var num5=parseInt("10",16);//按十六進制解析,16

parseFloat()與parseInt()函數相似,也是從第一個字符(位置0)開始解析每一個字符。並且也是一直解析到字符串末尾,或者解析到碰見一個無效的浮點數字字符爲止。也就是說 ,字符串中的第一小數點是有效的,而第二個小數點就是無效的了,所以它後面的字符串將被忽略。例如:

  alert(parseFloat("22.23.23"));//22.23

與parseInt()不一樣的是它只解析十進制的值,所以它沒有用第二個參數指定基礎數的用法。
注意:若是字符串包含的是一個可解析爲整數的數(沒有小數點,或者小數點都是0),它會返回整數。

下面是使用parseFloat()轉換數值的幾個典型示例:

var num1=parseFloat("1234blue");//1234

var num2=parseFloat("0xA");//0

var num3=parseFloat("22.5");//22.5

var num4=parseFloat("22.34.5");//22.34

var num5=parseFloat("0908.5");//908.5

var num6=parseFloat("3.125e7");//31250000
相關文章
相關標籤/搜索