JavaScript中的數(shù)值范圍介紹
JavaScript中所有的數(shù)字,無(wú)論是整數(shù)還是小數(shù),其類型均為Number。在程序內(nèi)部,Number類型的實(shí)質(zhì)是一個(gè)64位的浮點(diǎn)數(shù),這與Java中double類型的浮點(diǎn)數(shù)是一致的;因此,JavaScript中所有的數(shù)都是浮點(diǎn)數(shù)。遵循IEEE 754標(biāo)準(zhǔn)(浮點(diǎn)數(shù)算術(shù)標(biāo)準(zhǔn)),JavaScript所能表示的數(shù)值范圍為正負(fù)1.7976931348623157乘以10的308次方,其最小所能表示的小數(shù)為正負(fù)5乘以10的負(fù)324次方,這兩個(gè)邊界值可以分別通過(guò)訪問(wèn)Number對(duì)象的MAX_VALUE屬性和MIN_VALUE屬性來(lái)獲取。
對(duì)于整數(shù),根據(jù)ECMAScript標(biāo)準(zhǔn)的要求(http://ecma262-5.com/ELS5_HTML.htm#Section_8.5),JavaScript能表示并進(jìn)行精確算術(shù)運(yùn)算的整數(shù)范圍為:正負(fù)2的53次方,也即從最小值-9007199254740992到最大值+9007199254740992之間的范圍;對(duì)于超過(guò)這個(gè)范圍的整數(shù),JavaScript依舊可以進(jìn)行運(yùn)算,但卻不保證運(yùn)算結(jié)果的精度。值得注意的是,對(duì)于整數(shù)的位運(yùn)算(比如移位等操作),JavaScript僅支持32位整型數(shù),也即從-2147483648到+2147483647之間的整數(shù)。
實(shí)驗(yàn)
顯示JavaScript的最大數(shù)的絕對(duì)值、最小小數(shù)的絕對(duì)值:
console.log(Number.MAX_VALUE);
console.log(Number.MIN_VALUE);
顯示結(jié)果為1.7976931348623157e+308和5e-324。
對(duì)正負(fù)2的53次方范圍以外的整數(shù),JavaScript無(wú)法給出精確的計(jì)算結(jié)果:
var a = 9007199254740992;
console.log(a+3);
正確的運(yùn)算結(jié)果應(yīng)該是9007199254740995,但JavaScript給出的計(jì)算結(jié)果卻是9007199254740996。嘗試改變計(jì)算公式后可以發(fā)現(xiàn),只要整數(shù)大于9007199254740992,這種計(jì)算結(jié)果的錯(cuò)誤將頻繁出現(xiàn)。如果說(shuō)計(jì)算精度的偏差尚可接受的話,那么下面這個(gè)例子的后果就更嚴(yán)重了:
var MAX_INT = 9007199254740992;
for (var i = MAX_INT; i < MAX_INT + 2; ++i) {
// infinite loop
}
由于計(jì)算精度問(wèn)題,上面的for語(yǔ)句將陷入死循環(huán)。
對(duì)于位運(yùn)算,JavaScript僅支持32位整型數(shù):
var smallInt = 256;
var bigInt = 2200000000;
console.log(smallInt / 2);
console.log(smallInt >> 1);
console.log(bigInt / 2);
console.log(bigInt >> 1);
可以看到,對(duì)于32位以內(nèi)的整數(shù)(256),JavaScript可以進(jìn)行正確的位運(yùn)算,所得結(jié)果與除法運(yùn)算的結(jié)果一致(128)。而對(duì)于32位以外的整數(shù),JavaScript可以進(jìn)行正確的除法運(yùn)算(1100000000),但進(jìn)行位運(yùn)算后所得結(jié)果卻與正確結(jié)果相去甚遠(yuǎn)(-1047483648)。
- 25個(gè)非常棒的jQuery滑塊插件和教程小結(jié)
- Javascript實(shí)現(xiàn)滑塊滑動(dòng)改變值的實(shí)現(xiàn)代碼
- js用拖動(dòng)滑塊來(lái)控制圖片大小的方法
- jQuery+jRange實(shí)現(xiàn)滑動(dòng)選取數(shù)值范圍特效
- Jquery實(shí)現(xiàn)彈性滑塊滑動(dòng)選擇數(shù)值插件
- JS根據(jù)key值獲取URL中的參數(shù)值及把URL的參數(shù)轉(zhuǎn)換成json對(duì)象
- jQuery實(shí)現(xiàn)的數(shù)值范圍range2dslider選取插件特效多款代碼分享
相關(guān)文章
JavaScript實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)的方式匯總
這篇文章主要介紹了JavaScript實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)的方式匯總的相關(guān)資料,需要的朋友可以參考下2016-05-05
JS注冊(cè)/移除事件處理程序(ExtJS應(yīng)用程序設(shè)計(jì)實(shí)戰(zhàn))
最常做的事情就是注冊(cè)事件處理程序,因?yàn)樵贓xtJS的世界里,幾乎完全由時(shí)間組成,下面是處理程序案例,感興趣的朋友可以參考下哈,希望可以幫助到你2013-05-05
小程序?qū)崿F(xiàn)簡(jiǎn)單語(yǔ)音聊天的示例代碼
這篇文章主要介紹了小程序?qū)崿F(xiàn)簡(jiǎn)單語(yǔ)音聊天的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
JS拖動(dòng)技術(shù) 關(guān)于setCapture使用
JS拖動(dòng)技術(shù) 關(guān)于setCapture使用,學(xué)習(xí)js拖動(dòng)效果的朋友可以參考下。2010-12-12
一個(gè)不錯(cuò)的字符串轉(zhuǎn)碼解碼函數(shù)(自寫)
一個(gè)不錯(cuò)的字符串轉(zhuǎn)碼解碼函數(shù),自己寫的,有需要的朋友可以參考下2014-07-07
精通Javascript系列之?dāng)?shù)據(jù)類型 字符串
下面先講一下字符串String字符串由零個(gè)或者多個(gè)字符構(gòu)成。字符可以包括字母、數(shù)字、標(biāo)點(diǎn)符號(hào)和空格。2011-06-06
教你用幾十行js實(shí)現(xiàn)很炫的canvas交互特效
HTML5中的大部分動(dòng)畫都是通過(guò)Canvas實(shí)現(xiàn),因?yàn)镃anvas就像一塊畫布,我們可以通過(guò)調(diào)用腳本在Canvas上繪制任意形狀,甚至是制作動(dòng)畫,這篇文章主要給大家介紹了關(guān)于用幾十行js實(shí)現(xiàn)很炫的canvas交互特效的相關(guān)資料,需要的朋友可以參考下2021-11-11
jsp+javascript打造級(jí)連菜單的實(shí)例代碼
jsp+javascript打造級(jí)連菜單的實(shí)例代碼,需要的朋友可以參考一下2013-06-06
artDialog+plupload實(shí)現(xiàn)多文件上傳
這篇文章主要介紹了artDialog+plupload實(shí)現(xiàn)多文件上傳的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07
詳解JavaScript中的鏈?zhǔn)秸{(diào)用
這篇文章主要介紹了JavaScript中的鏈?zhǔn)秸{(diào)用的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)JavaScript,感興趣的朋友可以了解下2020-11-11

