溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript基本類型值-Number類型

發(fā)布時間:2020-10-12 10:25:27 來源:腳本之家 閱讀:170 作者:老板丶魚丸粗面 欄目:web開發(fā)

大致介紹

在JavaScript的內(nèi)部采用IEEE754格式來表示數(shù)字,所以不區(qū)分整數(shù)和浮點數(shù),都是用64位浮點數(shù)的形式儲存。就是說,在JavaScript內(nèi)部,就根本沒有小數(shù)。但是有些運算必須得需要整數(shù)完成,所以JavaScript有時會把64位的浮點數(shù)轉(zhuǎn)換成32位的整數(shù),再進行運算。

整數(shù)

JavaScript對整數(shù)提供四種表示方法:

1、二進制:有前綴0b的數(shù)值,出現(xiàn)0,1以外的數(shù)字會報錯

2、八進制:有前綴0o的數(shù)值,或者是以0后面再跟一個數(shù)字(0-7)。如果超出了前面所述的數(shù)值范圍,則會忽略第一個數(shù)字0,視為十進制數(shù)

注意:八進制字面量在嚴格模式下是無效的,會導致支持該模式的JavaScript引擎拋出錯誤

3、十六進制:有前綴0x,后跟任何十六進制數(shù)字(0~9及A~F),字母大小寫都可以,超出范圍會報錯

4、十進制

var num2 = 0b11;
 console.log(num2); //3
 var num2 = 0b12;
 console.log(num2); //報錯
 var num8 = 0o76;
 console.log(num8); //02
 var num8 = 0o78;
 console.log(num8); //報錯
 var num16 = 0x2a;
 console.log(num16); //42
 var num16 = 0x2h;
 console.log(num16) //報錯

浮點數(shù)

所謂浮點數(shù),就是該數(shù)值中必須包含一個小數(shù)點,并且小數(shù)點后面必須至少有一位數(shù)字。與整數(shù)不同,浮點數(shù)只能用十進制來表示

浮點數(shù)的精度遠遠不如整數(shù),所以設計浮點數(shù)的運算好比較要小心

例如:

 console.log(0.1 + 0.2 == 0.3); //false 0.30000000000000004
 console.log(0.6/0.2); //2.9999999999999996

科學計數(shù)法

對于那些極大極小的數(shù)值,可以用e表示法(即科學計數(shù)法)表示的浮點數(shù)值表示。用e表示法表示的數(shù)值等于e前面的數(shù)值乘以10的指數(shù)次冪

以下兩種情況,JavaScript會自動將數(shù)值轉(zhuǎn)為科學計數(shù)法表示,其他情況都采用字面形式直接表示。

1、小數(shù)點前的數(shù)字多余21位

 console.log(1234567890123456789012);// 1.2345678901234568e+21
 console.log(123456789012365648787); //123456789012365660000 

2、小數(shù)點后面的0多余5位

 console.log(0.0000006);//6e-7
 console.log(0.000006); //0.000006

數(shù)值范圍

由于內(nèi)存的限制,ECMAScript并不能保存世界上所有的數(shù)值,所以就有了最大值和最小值

最小值保存在Number.MIN_VALUE中,這個值是5e-324

最大值保存在Number.MAX_VALUE,這個值是1.7976931348623157e+308

 console.log(Number.MIN_VALUE) //5e-324
 console.log(Number.MAX_VALUE); //1.7976931348623157e+308

如果數(shù)字超過最大值,javascript會返回Infinity,這稱為正向溢出(overflow);如果等于或超過最小負值-1023(即非常接近0),javascript會直接把這個數(shù)轉(zhuǎn)為0,這稱為負向溢出(underflow)

如果要想確定一個數(shù)值是不是有窮的,可以使用isFinite()函數(shù)。這個函數(shù)在參數(shù)位于最小與最大數(shù)值之間時會返回true

 var result = Number.MAX_VALUE + Number.MAX_VALUE;
 console.log(isFinite(result)); //false

特殊數(shù)值

1、+0和-0

這兩個0在大對數(shù)的情況下都是等價的

 -0 === +0; //true
 0 === -0; //true
 0 === +0; //true

但是在作為分母的時候是不一樣的

1/-0 == 1/+0; //false

2、infinity

Infinity表示“無窮”,用來表示兩種場景。一種是一個正的數(shù)值太大,或一個負的數(shù)值太小,無法表示;另一種是非0數(shù)值除以0,得到Infinity。

 Math.pow(2,Math.pow(2,100));//Infinity
 1/0;//Infinity

Infinity參與的運算結(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

這個數(shù)值表示一個本來要返回數(shù)值的操作數(shù)未返回數(shù)值的情況

NaN與任何值不相等,包括它本身,并且涉及NaN的任何操作都會返回NaN

 5 - 'x'; //NaN
 Math.acos(2); //NaN
 0 / 0; //NaN
 NaN == NaN;//false
 NaN == Infinity;//false 

NaN不是一種獨立的數(shù)據(jù)類型,而是一種特殊數(shù)值,它的數(shù)據(jù)類型依然屬于Number

 typeof NaN; //number

isNaN方法可以用來判斷一個值是否為NaN,但是,isNaN只對數(shù)值有效,如果傳入其他值,會被先轉(zhuǎn)成數(shù)值。比如,傳入字符串的時候,字符串會被先轉(zhuǎn)成NaN,所以最后返回true,這一點要特別引起注意。也就是說,isNaN為true的值,有可能不是NaN,而是一個字符串。

 isNaN('Hello') // true
 // 相當于
 isNaN(Number('Hello')) // true 

判斷NaN更可靠的方法是,利用NaN是javascript之中唯一不等于自身的值這個特點,進行判斷

 function isNaN(value){
 return value != value;
 }

數(shù)制轉(zhuǎn)換

有3個函數(shù)可以把非數(shù)值轉(zhuǎn)換成數(shù)值:Number()、parseInt()和parseFloat()。其中Number()可以將任意類型的值轉(zhuǎn)化成數(shù)值,而parseInt()和parseFloat()只應用于字符串向數(shù)字的轉(zhuǎn)換

Number()

轉(zhuǎn)換規(guī)則:

1、如果是Boolean值,true和false將分別轉(zhuǎn)換為1和0

2、如果是null值,返回0

3、如果是undefined,返回NaN

4、如果是字符串,遵循以下規(guī)則:

(1)若字符串只包含十進制或十六進制數(shù)字,則轉(zhuǎn)成十進制的數(shù)字

注意:Number()不識別八進制數(shù)字的字符串,會按照十進制數(shù)字處理

字符串'1.2.'不會報錯,但數(shù)字1.2.會報錯

(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ù)字字符或者負號,parseInt()就會返回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)不具備解析八進制的能力。例如八進制“070”,會忽略前面的“0”,得到十進制的70

為了消除在使用parseInt()函數(shù)時可能導致的上述困惑,可以為這個函數(shù)提供第二個參數(shù):轉(zhuǎn)換時使用的基數(shù)(多少進制)

 parseInt("070") //70
 parseInt("070",8) //56

parseFloat()

parseFloat()專門用于字符串轉(zhuǎn)換浮點數(shù)。同樣地,解析時會忽略字符串前面的空格,直到找到第一個非空格字符,然后一直解析到字符串末尾或一個無效的浮點數(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()只解析十進制,所以十六進制的字符串始終會被轉(zhuǎn)換成0。因此也沒有第二個參數(shù)用來指定基數(shù)

 parseFloat("0xA") //0

注意:Number('')的結(jié)果是0,parseInt('')和parseFloat('')的結(jié)果是NaN

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持億速云!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI