Number類型的值:整數/浮點數值
?
整數
十進制 ?e.g.: var intNum = 50;
八進制 ?(嚴格模式下無效,解析錯誤)字面值首位必須是0,之后的數字序列為0~7 ?e.g.: var intNum = 070; //解析為十進制56 (如果字面值數值超出了范圍,前導0將被忽略,后面的數值將被當做十進制數值解析 e.g.: var intNum = 078; //無效的八進制數字,解析為十進制78)
十六進制 ?字面值的前兩位必須是0x(或0X),之后的數據序列為0~7或A~F(可大寫,亦可小寫) ?e.g.:var intNum = 0xA; //解析為十進制10
算數計算時,所有以八進制和十六進制表示的數值最終都會轉換成十進制數值計算
?
浮點數
數值中必須包含一個小數點,且小數點后面必須至少有一個數字 e.g.:?var floatNum = 1.5;(小數點前面可以沒有整數,e.g.:?var floatNum = .5; //有效,解析為0.5,但不推薦)
如果小數點后面沒有數字,將被解析為整數值?e.g.:?var floatNum = 5.; //解析為整數5 (因為浮點數保存需要的內存空間是整數保存的兩倍,ECMAScript會不失時機地將浮點數值轉為整數值)
科學計數法 ?極大或極小的數值可附加e(或E)來表示,等同于e前面的數值乘以10的指數次冪
?
數值范圍
最大值:Number.MAX_VALUE?1.7976931348623157e+308
最小值:Number.MIN_VALUE?5e-324
超出最值,自動轉換成Infinity/-Infinity ?無窮值無法參與計算 (Number.POSITIVE_INFINITY/Number.NEGATIVE_INFINITY也分別保存著Infinity/-Infinity)
判斷是否是有窮值 ?isFinite(arg) ?arg可以為任何類型的數據,非Number數據將隱式轉換成Number數據
?
NaN
非數值(Not a Number)保存一個本來要返回數值但未返回數值的數據 如任何數值除以0,返回NaN
任何與NaN的操作都會返回NaN
NaN與任何值都不想等,包括NaN本身
判斷是否未NaN ?isNaN(arg) ?arg可以為任何類型的數據,非Number數據將隱式轉換成Number數據
?
數值轉換
Number()/parseInt()/parseFloat()
Number()可用于任何數據類型轉換成數值 ? ?parseInt()/parseFloat()一般用于字符串轉換成數值
Number()轉換規則:? ? ? ? ? ? ? ?
Boolean ? ?true-->1 ? ?false-->0
Number ? ?返回本身
null ? ? ? ? ?0
undefined NaN
String ? ? ? a/只包含數字(包括前面帶正好或符號)-->十進制數值 (前導為0的忽略0,不會轉換成八進制/前導為0x的,轉換為十六進制大小的十進制)
? ? ? ? ? ? ? ? b/只包含浮點-->對應的浮點數值(前導0被忽略)
? ? ? ? ? ? ? ? c/只包含空字符串-->0
? ? ? ? ? ? ? ? d/包含其他字符-->NaN
parseInt()轉換規則:(正因為Number()處理字符串轉換過于復雜,一般字符串轉換用parseInt()比較好)
主要看其是否符合數值模式
忽略字符串前面的空格,直到找到第一個非空格字符
a/第一個字符不是數字或正負號-->NaN ?e.g.:parseInt("abcd")-->NaN ?e.g.:parseInt("")-->NaN(區別Number("")-->0)
b/第一個字符是數字字符,順序解析第二個,直到解析完所有字符或遇到非數字字符結束-->已成功解析為數字的數字字面量?e.g.:parseInt("1234blue")-->1234
c/能夠解析Number類型的整數的各種格式:十進制/八進制/十六進制(parseInt()可以傳遞第二個參數:多少進制;十六進制可以不帶前面的0x,推薦傳遞帶兩個參數的方式)?e.g.:parseInt("0xA")-->10 ? ?parseInt("A", 16)-->10
?parseFloat()轉換規則:
類似parseInt()
字符中有兩個以上的小數點時,第一個小數點有效,第二個之后都無效,且后面的字符被忽略 ?e.g.:parseFloat("11.22.33")-->11.22
只解析十進制格式字符串,沒有第二個參數指定轉換方式
十六進制格式字符串-->0?e.g.:parseFloat("0xA")-->0
沒有小數點的整數字符串-->整數?e.g.:parseFloat("1234blue")-->1234
科學計數法?e.g.:parseFloat("3.14e2")-->314