JavaScript基本類型值-Number類型
大致介紹
在JavaScript的內(nèi)部采用IEEE754格式來(lái)表示數(shù)字,所以不區(qū)分整數(shù)和浮點(diǎn)數(shù),都是用64位浮點(diǎn)數(shù)的形式儲(chǔ)存。就是說(shuō),在JavaScript內(nèi)部,就根本沒有小數(shù)。但是有些運(yùn)算必須得需要整數(shù)完成,所以JavaScript有時(shí)會(huì)把64位的浮點(diǎn)數(shù)轉(zhuǎn)換成32位的整數(shù),再進(jìn)行運(yùn)算。
整數(shù)
JavaScript對(duì)整數(shù)提供四種表示方法:
1、二進(jìn)制:有前綴0b的數(shù)值,出現(xiàn)0,1以外的數(shù)字會(huì)報(bào)錯(cuò)
2、八進(jìn)制:有前綴0o的數(shù)值,或者是以0后面再跟一個(gè)數(shù)字(0-7)。如果超出了前面所述的數(shù)值范圍,則會(huì)忽略第一個(gè)數(shù)字0,視為十進(jìn)制數(shù)
注意:八進(jìn)制字面量在嚴(yán)格模式下是無(wú)效的,會(huì)導(dǎo)致支持該模式的JavaScript引擎拋出錯(cuò)誤
3、十六進(jìn)制:有前綴0x,后跟任何十六進(jìn)制數(shù)字(0~9及A~F),字母大小寫都可以,超出范圍會(huì)報(bào)錯(cuò)
4、十進(jìn)制
var num2 = 0b11; console.log(num2); //3 var num2 = 0b12; console.log(num2); //報(bào)錯(cuò) var num8 = 0o76; console.log(num8); //02 var num8 = 0o78; console.log(num8); //報(bào)錯(cuò) var num16 = 0x2a; console.log(num16); //42 var num16 = 0x2h; console.log(num16) //報(bào)錯(cuò)
浮點(diǎn)數(shù)
所謂浮點(diǎn)數(shù),就是該數(shù)值中必須包含一個(gè)小數(shù)點(diǎn),并且小數(shù)點(diǎn)后面必須至少有一位數(shù)字。與整數(shù)不同,浮點(diǎn)數(shù)只能用十進(jìn)制來(lái)表示
浮點(diǎn)數(shù)的精度遠(yuǎn)遠(yuǎn)不如整數(shù),所以設(shè)計(jì)浮點(diǎn)數(shù)的運(yùn)算好比較要小心
例如:
console.log(0.1 + 0.2 == 0.3); //false 0.30000000000000004 console.log(0.6/0.2); //2.9999999999999996
科學(xué)計(jì)數(shù)法
對(duì)于那些極大極小的數(shù)值,可以用e表示法(即科學(xué)計(jì)數(shù)法)表示的浮點(diǎn)數(shù)值表示。用e表示法表示的數(shù)值等于e前面的數(shù)值乘以10的指數(shù)次冪
以下兩種情況,JavaScript會(huì)自動(dòng)將數(shù)值轉(zhuǎn)為科學(xué)計(jì)數(shù)法表示,其他情況都采用字面形式直接表示。
1、小數(shù)點(diǎn)前的數(shù)字多余21位
console.log(1234567890123456789012);// 1.2345678901234568e+21 console.log(123456789012365648787); //123456789012365660000
2、小數(shù)點(diǎn)后面的0多余5位
console.log(0.0000006);//6e-7 console.log(0.000006); //0.000006
數(shù)值范圍
由于內(nèi)存的限制,ECMAScript并不能保存世界上所有的數(shù)值,所以就有了最大值和最小值
最小值保存在Number.MIN_VALUE中,這個(gè)值是5e-324
最大值保存在Number.MAX_VALUE,這個(gè)值是1.7976931348623157e+308
console.log(Number.MIN_VALUE) //5e-324 console.log(Number.MAX_VALUE); //1.7976931348623157e+308
如果數(shù)字超過最大值,javascript會(huì)返回Infinity,這稱為正向溢出(overflow);如果等于或超過最小負(fù)值-1023(即非常接近0),javascript會(huì)直接把這個(gè)數(shù)轉(zhuǎn)為0,這稱為負(fù)向溢出(underflow)
如果要想確定一個(gè)數(shù)值是不是有窮的,可以使用isFinite()函數(shù)。這個(gè)函數(shù)在參數(shù)位于最小與最大數(shù)值之間時(shí)會(huì)返回true
var result = Number.MAX_VALUE + Number.MAX_VALUE; console.log(isFinite(result)); //false
特殊數(shù)值
1、+0和-0
這兩個(gè)0在大對(duì)數(shù)的情況下都是等價(jià)的
-0 === +0; //true 0 === -0; //true 0 === +0; //true
但是在作為分母的時(shí)候是不一樣的
1/-0 == 1/+0; //false
2、infinity
Infinity表示“無(wú)窮”,用來(lái)表示兩種場(chǎng)景。一種是一個(gè)正的數(shù)值太大,或一個(gè)負(fù)的數(shù)值太小,無(wú)法表示;另一種是非0數(shù)值除以0,得到Infinity。
Math.pow(2,Math.pow(2,100));//Infinity 1/0;//Infinity
Infinity參與的運(yùn)算結(jié)果只能是其本身、0或NaN
* Infinity;//Infinity - Infinity;//-Infinity + Infinity;//Infinity / Infinity;//0 Infinity / 2;//Infinity Infinity * Infinity;//Infinity Infinity - Infinity;//NaN Infinity + Infinity;//Infinity Infinity / Infinity;//NaN
3、NaN
這個(gè)數(shù)值表示一個(gè)本來(lái)要返回?cái)?shù)值的操作數(shù)未返回?cái)?shù)值的情況
NaN與任何值不相等,包括它本身,并且涉及NaN的任何操作都會(huì)返回NaN
5 - 'x'; //NaN Math.acos(2); //NaN 0 / 0; //NaN NaN == NaN;//false NaN == Infinity;//false
NaN不是一種獨(dú)立的數(shù)據(jù)類型,而是一種特殊數(shù)值,它的數(shù)據(jù)類型依然屬于Number
typeof NaN; //number
isNaN方法可以用來(lái)判斷一個(gè)值是否為NaN,但是,isNaN只對(duì)數(shù)值有效,如果傳入其他值,會(huì)被先轉(zhuǎn)成數(shù)值。比如,傳入字符串的時(shí)候,字符串會(huì)被先轉(zhuǎn)成NaN,所以最后返回true,這一點(diǎn)要特別引起注意。也就是說(shuō),isNaN為true的值,有可能不是NaN,而是一個(gè)字符串。
isNaN('Hello') // true // 相當(dāng)于 isNaN(Number('Hello')) // true
判斷NaN更可靠的方法是,利用NaN是javascript之中唯一不等于自身的值這個(gè)特點(diǎn),進(jìn)行判斷
function isNaN(value){ return value != value; }
數(shù)制轉(zhuǎn)換
有3個(gè)函數(shù)可以把非數(shù)值轉(zhuǎn)換成數(shù)值:Number()、parseInt()和parseFloat()。其中Number()可以將任意類型的值轉(zhuǎn)化成數(shù)值,而parseInt()和parseFloat()只應(yīng)用于字符串向數(shù)字的轉(zhuǎn)換
Number()
轉(zhuǎn)換規(guī)則:
1、如果是Boolean值,true和false將分別轉(zhuǎn)換為1和0
2、如果是null值,返回0
3、如果是undefined,返回NaN
4、如果是字符串,遵循以下規(guī)則:
(1)若字符串只包含十進(jìn)制或十六進(jìn)制數(shù)字,則轉(zhuǎn)成十進(jìn)制的數(shù)字
注意:Number()不識(shí)別八進(jìn)制數(shù)字的字符串,會(huì)按照十進(jìn)制數(shù)字處理
字符串'1.2.'不會(huì)報(bào)錯(cuò),但數(shù)字1.2.會(huì)報(bào)錯(cuò)
(2)若字符串為空字符串或空格字符串,則轉(zhuǎn)成0
(3)其他情況的字符串,則轉(zhuǎn)成NaN
Number(true) //1 Number(null) //0 Number(undefined) //NaN Number("0123") //123 Number("0x123") //291 Number("0.2") //0.2 Number("") //0 Number("asd") //NaN
parseInt()
parseInt()專門用于把字符串轉(zhuǎn)換成整數(shù)。在轉(zhuǎn)換字符串時(shí),會(huì)忽略字符串前面的空格,直到找到第一個(gè)非空格字符。如果第一個(gè)字符不是數(shù)字字符或者負(fù)號(hào),parseInt()就會(huì)返回NaN。如果是,則繼續(xù)解析,直到解析完成或者遇到非數(shù)字字符
console.log(parseInt(' 123.8px'));//123 console.log(parseInt(' 123.8 '));//123 console.log(parseInt(' -123.8px'));//-123 console.log(parseInt('a123.8px'));//NaN console.log(parseInt('0 123.8px'));//0
注意:在ECMAScript5中,parseInt()已經(jīng)不具備解析八進(jìn)制的能力。例如八進(jìn)制“070”,會(huì)忽略前面的“0”,得到十進(jìn)制的70
為了消除在使用parseInt()函數(shù)時(shí)可能導(dǎo)致的上述困惑,可以為這個(gè)函數(shù)提供第二個(gè)參數(shù):轉(zhuǎn)換時(shí)使用的基數(shù)(多少進(jìn)制)
parseInt("070") //70 parseInt("070",8) //56
parseFloat()
parseFloat()專門用于字符串轉(zhuǎn)換浮點(diǎn)數(shù)。同樣地,解析時(shí)會(huì)忽略字符串前面的空格,直到找到第一個(gè)非空格字符,然后一直解析到字符串末尾或一個(gè)無(wú)效的浮點(diǎn)數(shù)字字符為止
console.log(parseFloat(' 0123.px'));//123 console.log(parseFloat(' 123.px'));//123 console.log(parseFloat(' 123.1px'));//123.1 console.log(parseFloat(' 123.1.2px '));//123.1 console.log(parseFloat(' -123.0px'));//-123 console.log(parseFloat('.123.1px'));//0.123 console.log(parseFloat('0 123px'));//0
注意:parseFloat()只解析十進(jìn)制,所以十六進(jìn)制的字符串始終會(huì)被轉(zhuǎn)換成0。因此也沒有第二個(gè)參數(shù)用來(lái)指定基數(shù)
parseFloat("0xA") //0
注意:Number('')的結(jié)果是0,parseInt('')和parseFloat('')的結(jié)果是NaN
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!
相關(guān)文章
ES6中Set和Map數(shù)據(jù)結(jié)構(gòu),Map與其它數(shù)據(jù)結(jié)構(gòu)互相轉(zhuǎn)換操作實(shí)例詳解
這篇文章主要介紹了ES6中Set和Map數(shù)據(jù)結(jié)構(gòu),Map與其它數(shù)據(jù)結(jié)構(gòu)互相轉(zhuǎn)換操作,結(jié)合實(shí)例形式詳細(xì)分析了ES6中的Set和Map數(shù)據(jù)結(jié)構(gòu)的概念、原理、遍歷、去重等操作,以及Map與其它數(shù)據(jù)結(jié)構(gòu)互相轉(zhuǎn)換操作,需要的朋友可以參考下2019-02-02JavaScript實(shí)現(xiàn)登錄滑塊驗(yàn)證
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)登錄滑塊驗(yàn)證,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04使用JSON.parse將json字符串轉(zhuǎn)換成json對(duì)象的時(shí)候會(huì)出錯(cuò)
使用JSON.parse將json字符串轉(zhuǎn)換成json對(duì)象的時(shí)候會(huì)出錯(cuò),主要是雙引號(hào),回車換行等影響明顯,左尖括號(hào)和右尖括號(hào)也會(huì)導(dǎo)致顯示問題2014-09-09javascript實(shí)現(xiàn)tab切換特效
這篇文章主要介紹了javascript實(shí)現(xiàn)tab切換特效,實(shí)現(xiàn)的方法很簡(jiǎn)單,特別適合初學(xué)者學(xué)習(xí)javascript實(shí)現(xiàn)tab切換特效,tab切換再也不是問題,需要的朋友可以參考下2015-11-11elemetUi 組件--el-upload實(shí)現(xiàn)上傳Excel文件的實(shí)例
這篇文章主要介紹了elemetUi 組件--el-upload實(shí)現(xiàn)上傳Excel文件的實(shí)例的相關(guān)資料,希望通過本文大家能夠?qū)崿F(xiàn)這樣的功能,需要的朋友可以參考下2017-10-10JavaScript實(shí)現(xiàn)單擊網(wǎng)頁(yè)任意位置打開新窗口與關(guān)閉窗口的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)單擊網(wǎng)頁(yè)任意位置打開新窗口與關(guān)閉窗口的方法,涉及javascript窗口的相關(guān)操作函數(shù)與使用技巧,需要的朋友可以參考下2017-09-09js寫出遮罩層登陸框和對(duì)聯(lián)廣告并自動(dòng)跟隨滾動(dòng)條滾動(dòng)
這篇文章主要介紹了js寫出遮罩層登陸框和對(duì)聯(lián)廣告并自動(dòng)跟隨滾動(dòng)條滾動(dòng),需要的朋友可以參考下2014-04-04JavaScript實(shí)現(xiàn)網(wǎng)頁(yè)五子棋小游戲
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)網(wǎng)頁(yè)五子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06