JavaScript中的數(shù)值范圍介紹
JavaScript中所有的數(shù)字,無論是整數(shù)還是小數(shù),其類型均為Number。在程序內(nèi)部,Number類型的實質(zhì)是一個64位的浮點數(shù),這與Java中double類型的浮點數(shù)是一致的;因此,JavaScript中所有的數(shù)都是浮點數(shù)。遵循IEEE 754標準(浮點數(shù)算術標準),JavaScript所能表示的數(shù)值范圍為正負1.7976931348623157乘以10的308次方,其最小所能表示的小數(shù)為正負5乘以10的負324次方,這兩個邊界值可以分別通過訪問Number對象的MAX_VALUE屬性和MIN_VALUE屬性來獲取。
對于整數(shù),根據(jù)ECMAScript標準的要求(http://ecma262-5.com/ELS5_HTML.htm#Section_8.5),JavaScript能表示并進行精確算術運算的整數(shù)范圍為:正負2的53次方,也即從最小值-9007199254740992到最大值+9007199254740992之間的范圍;對于超過這個范圍的整數(shù),JavaScript依舊可以進行運算,但卻不保證運算結(jié)果的精度。值得注意的是,對于整數(shù)的位運算(比如移位等操作),JavaScript僅支持32位整型數(shù),也即從-2147483648到+2147483647之間的整數(shù)。
實驗
顯示JavaScript的最大數(shù)的絕對值、最小小數(shù)的絕對值:
console.log(Number.MAX_VALUE);
console.log(Number.MIN_VALUE);
顯示結(jié)果為1.7976931348623157e+308和5e-324。
對正負2的53次方范圍以外的整數(shù),JavaScript無法給出精確的計算結(jié)果:
var a = 9007199254740992;
console.log(a+3);
正確的運算結(jié)果應該是9007199254740995,但JavaScript給出的計算結(jié)果卻是9007199254740996。嘗試改變計算公式后可以發(fā)現(xiàn),只要整數(shù)大于9007199254740992,這種計算結(jié)果的錯誤將頻繁出現(xiàn)。如果說計算精度的偏差尚可接受的話,那么下面這個例子的后果就更嚴重了:
var MAX_INT = 9007199254740992;
for (var i = MAX_INT; i < MAX_INT + 2; ++i) {
// infinite loop
}
由于計算精度問題,上面的for語句將陷入死循環(huá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);
可以看到,對于32位以內(nèi)的整數(shù)(256),JavaScript可以進行正確的位運算,所得結(jié)果與除法運算的結(jié)果一致(128)。而對于32位以外的整數(shù),JavaScript可以進行正確的除法運算(1100000000),但進行位運算后所得結(jié)果卻與正確結(jié)果相去甚遠(-1047483648)。
相關文章
JS函數(shù)驗證總結(jié)(方便js客戶端輸入驗證)
JS函數(shù)驗證總結(jié),都是一些基礎的東西,現(xiàn)在比較流行jquery了,不過這些東西仍然需要大家會。2010-10-10淺談nodeName,nodeValue,nodeType,typeof 的區(qū)別
本文主要簡單介紹了nodeName,nodeValue,nodeType,typeof 的區(qū)別,算是知識點的一個小總結(jié),希望對小伙伴們有所幫助2015-01-01詳解JS轉(zhuǎn)換數(shù)值函數(shù)Number()、parseInt()、parseFloat()
JS中有三種函數(shù)可以將非數(shù)值轉(zhuǎn)換成數(shù)值:Number()、parseInt()和parseFloat()。接下來通過本文詳細的給大家介紹JS轉(zhuǎn)換數(shù)值函數(shù)Number()、parseInt()、parseFloat()的實例代碼,感興趣的朋友一起看看吧2018-08-08TypeScript?中使用?getter?和?setter的方法
這篇文章主要介紹了TypeScript?中如何使用?getter?和?setter,?getter使我們能夠?qū)傩越壎ǖ皆谠L問屬性時調(diào)用的函數(shù),而?setter?將屬性綁定到在嘗試設置屬性時調(diào)用的函數(shù),需要的朋友可以參考下2023-04-04JavaScript極簡入門教程(二):對象和函數(shù)
這篇文章主要介紹了JavaScript極簡入門教程(二):對象和函數(shù),本文講解了對象基礎知識、函數(shù)基礎知識、函數(shù)調(diào)用、異常、繼承等內(nèi)容,需要的朋友可以參考下2014-10-10