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