022_JavaScript数字
1. JavaScript只有一種數(shù)值類(lèi)型Number。(沒(méi)有其它語(yǔ)言的short、int、long、float、double)
2. 書(shū)寫(xiě)數(shù)值時(shí)帶不帶小數(shù)點(diǎn)均可。
3. JavaScript數(shù)值始終是64位的浮點(diǎn)數(shù)
3.1. JavaScript數(shù)值始終以雙精度浮點(diǎn)數(shù)來(lái)存儲(chǔ), 根據(jù)國(guó)際IEEE 754標(biāo)準(zhǔn)。
3.2. 此格式用64位存儲(chǔ)數(shù)值, 其中0到51存儲(chǔ)數(shù)字(片段), 52到62存儲(chǔ)指數(shù), 63位存儲(chǔ)符號(hào):
3.3. 整數(shù)類(lèi)型的范圍: 5e-324 ~ 1.7976931348623157e+308。
3.4. 值得注意的是, 對(duì)于整數(shù)的位運(yùn)算(比如位移等操作), JavaScript僅支持32位整型數(shù), 也即從-2147483648到+2147483647之間的整數(shù)。
4. 精度
4.1. 整數(shù)會(huì)被精確到15位:
var a = 999999999999999; // a是15位整數(shù)最大值, 能保證精度, 是999999999999999 var b = 9999999999999997; // b是16位整數(shù), 不保證精度 var c = 9999999999999999; // c是16位整數(shù), 不保證精度 // 15位的整數(shù)進(jìn)行數(shù)學(xué)運(yùn)行能夠保證精準(zhǔn) var d = (((999999999999999 - 100000 - 1) / 2 - 9999) / 4 * 8 + 111999 + 8000) / 9 / 3 + 960900000000000;4.2. 小數(shù)在進(jìn)行數(shù)學(xué)運(yùn)算的時(shí)候最大數(shù)是17位, 但是浮點(diǎn)的算數(shù)并不總是100%精準(zhǔn):
var e = 0.2 + 0.1; // 小數(shù)在進(jìn)行數(shù)學(xué)運(yùn)算的時(shí)候最大數(shù)是17位 var f = 0.3 - 0.2111; // 小數(shù)在進(jìn)行數(shù)學(xué)運(yùn)算的時(shí)候最大數(shù)是17位 var g = 0.001 + 1.1; // 并不總是17位小數(shù) // 我們?cè)趯?duì)小說(shuō)進(jìn)行算數(shù)運(yùn)算的時(shí)候, 通常對(duì)小說(shuō)進(jìn)行擴(kuò)大10的幾次方, 計(jì)算完成后, 再除以這個(gè)10的幾次方 var h = (0.3 * 10000 - 0.2111 * 10000) / 10000;5. 科學(xué)計(jì)數(shù)法
5.1. 超大或超小的數(shù)可通過(guò)科學(xué)計(jì)數(shù)法來(lái)寫(xiě)。
5.2. 大于等于le+21的數(shù)字會(huì)自動(dòng)使用科學(xué)計(jì)數(shù)法輸出。
5.3. 小于le+21的數(shù)字縱然我們用科學(xué)計(jì)數(shù)法表示, 但輸出時(shí)也會(huì)是完整數(shù)字。
5.4. 默認(rèn)把具有6個(gè)或6個(gè)以上前導(dǎo)0的浮點(diǎn)數(shù)轉(zhuǎn)換成科學(xué)計(jì)數(shù)法。
var i = 9.99999999999999930000e20; // 小于le+21的數(shù)字縱然我們用科學(xué)計(jì)數(shù)法表示, 但輸出時(shí)也會(huì)是完整數(shù)字。 var j = 9.99999999999999940000e20; // 發(fā)生了舍入, 大于le+21, 使用科學(xué)計(jì)數(shù)法輸出 var k = 1e21; // 科學(xué)計(jì)數(shù)法 var l = 0.0000001; // 默認(rèn)把具有6個(gè)或6個(gè)以上前導(dǎo)0的浮點(diǎn)數(shù)轉(zhuǎn)換成科學(xué)計(jì)數(shù)法。6. 數(shù)字字符串
6.1. JavaScript字符串可以擁有數(shù)字內(nèi)容。
6.2. 在所有數(shù)字運(yùn)算中, JavaScript會(huì)嘗試將字符串轉(zhuǎn)換為數(shù)字。
6.3. 實(shí)例
var m = '100' / '10'; // 結(jié)果是10 var n = '100' * '10'; // 結(jié)果是1000 var o = '100' - '10'; // 結(jié)果是907. NaN-非數(shù)值
7.1. NaN 屬于 JavaScript 保留詞,指示某個(gè)數(shù)不是合法數(shù)。
7.2. 嘗試將一個(gè)字符串完整的轉(zhuǎn)換成數(shù)字時(shí), 如果轉(zhuǎn)換失敗, 就會(huì)得到NaN(Not a Number)。
7.3. isNaN()函數(shù)
7.3.1.?您可使用全局JavaScript函數(shù)isNaN()來(lái)確定某個(gè)值是否是非數(shù)字值。
7.3.2.?語(yǔ)法
isNaN(x)7.3.3.?參數(shù)
7.3.4. 如果x是特殊的非數(shù)字值NaN(或者是被轉(zhuǎn)換為這樣的值), 返回的值就是true。如果x是其他值, 則返回false。
7.3.5. 如果把NaN與任何值(包括其自身)相比得到的結(jié)果均是false, 所以要判斷某個(gè)值是否是NaN, 不能使用==或===運(yùn)算符。正因?yàn)槿绱? isNaN()函數(shù)是必需的。
7.4. NaN是數(shù)值類(lèi)型: typeOf NaN返回number。
7.5. 實(shí)例
var u = isNaN("111"); // 返回false var v = isNaN("111a"); // 返回true var w = isNaN(NaN); // 返回true, 因?yàn)镹aN不是數(shù) var x = typeof(NaN); // 返回number8. 無(wú)窮數(shù)
8.1. Infinity(或-Infinity)是JavaScript在計(jì)算數(shù)時(shí)超出最大可能數(shù)范圍時(shí)返回的值。
8.2. Infinity是數(shù)值類(lèi)型: typeOf Infinity返回number。
8.3. isFinite()函數(shù)
8.3.1. 您可使用全局JavaScript函數(shù)isFinite()檢查某個(gè)值是否為有窮大的數(shù)。
8.3.2. 語(yǔ)法
isFinite(number)8.3.3. 參數(shù)
8.3.4. 如果number是有限數(shù)字或可轉(zhuǎn)換為有限數(shù)字, 那么返回true。否則, 如果number是NaN(非數(shù)字)或者是正、負(fù)無(wú)窮大的數(shù), 則返回false。
var y = isFinite(111); // 返回true var z = isFinite("111"); // 返回true var A = isFinite("111a"); // 返回false var B = isFinite(Infinity); // 返回false, 因?yàn)镮nfinity是正無(wú)窮大 var C = isFinite(-Infinity); // 返回false, 因?yàn)?Infinity是負(fù)無(wú)窮大 var D = isFinite(NaN); // 返回false, 因?yàn)镹aN非數(shù)字 var E = typeof(Infinity); // 返回number var F = typeof(-Infinity); // 返回number var G = isNaN(Infinity); // 返回false, 因?yàn)镮nfinity是正無(wú)窮數(shù) var H = isNaN(-Infinity); // 返回false, 因?yàn)?Infinity是負(fù)無(wú)窮數(shù)9. 數(shù)字和字符串相加
9.1. JavaScript的加法和級(jí)聯(lián)(concatenation)都使用+運(yùn)算符。數(shù)字用加法, 字符串用級(jí)聯(lián)。
9.2. 如果對(duì)兩個(gè)字符串相加,結(jié)果將是一個(gè)字符串的級(jí)聯(lián):
var x = "10"; var y = "20"; var z = x + y; // z 將是 1020(字符串)9.3. 如果您對(duì)一個(gè)數(shù)和一個(gè)字符串相加, 結(jié)果也是字符串級(jí)聯(lián):
var x = 10; var y = "20"; var z = x + y; // z 將是 1020(一個(gè)字符串)9.4. 兩個(gè)或多個(gè)數(shù)字算數(shù)運(yùn)算, 并且在語(yǔ)句最左側(cè)(JavaScript從左向右進(jìn)行編譯), 之后又和字符串級(jí)聯(lián), 這種情況會(huì)先進(jìn)行算數(shù)運(yùn)算再和字符串級(jí)聯(lián)。
var x = 10; var y = 20; var z = "30"; var result = x + y + z; // 因?yàn)閤和y都是數(shù), 10+20將被相加。因?yàn)閦是字符串, 30+"30"被級(jí)聯(lián)。10. 進(jìn)制
10.1. 計(jì)算機(jī)中常見(jiàn)的進(jìn)制是: 二進(jìn)制、八進(jìn)制、十進(jìn)制和十六進(jìn)制。
10.2. 八進(jìn)制字面量的首數(shù)字必須是0, 其后的數(shù)字可以是任何八進(jìn)制數(shù)字(0-7)。
var x = 011; // x將是910.3. 十六進(jìn)制字面量以0x或0X前綴開(kāi)頭, 然后是任意的十六進(jìn)制數(shù)字(0到9和A到F)。
var x = 0xFF; // x將是25510.4. 默認(rèn)地, Javascript把數(shù)顯示為十進(jìn)制數(shù)。
10.5. 盡管所有整數(shù)都可以表示為八進(jìn)制或十六進(jìn)制, 但所有數(shù)學(xué)運(yùn)算返回的都是十進(jìn)制結(jié)果。
11. 例子
11.1. 代碼
<!DOCTYPE html> <html><head><meta charset="utf-8" /><title>JavaScript數(shù)字</title></head><body><script type="text/javascript">var a = 999999999999999; // a是15位整數(shù)最大值, 能保證精度, 是999999999999999var b = 9999999999999997; // b是16位整數(shù), 不保證精度var c = 9999999999999999; // c是16位整數(shù), 不保證精度// 15位的整數(shù)進(jìn)行數(shù)學(xué)運(yùn)行能夠保證精準(zhǔn)var d = (((999999999999999 - 100000 - 1) / 2 - 9999) / 4 * 8 + 111999 + 8000) / 9 / 3 + 960900000000000;var e = 0.2 + 0.1; // 小數(shù)在進(jìn)行數(shù)學(xué)運(yùn)算的時(shí)候最大數(shù)是17位var f = 0.3 - 0.2111; // 小數(shù)在進(jìn)行數(shù)學(xué)運(yùn)算的時(shí)候最大數(shù)是17位var g = 0.001 + 1.1; // 并不總是17位小數(shù)// 我們?cè)趯?duì)小說(shuō)進(jìn)行算數(shù)運(yùn)算的時(shí)候, 通常對(duì)小說(shuō)進(jìn)行擴(kuò)大10的幾次方, 計(jì)算完成后, 再除以這個(gè)10的幾次方var h = (0.3 * 10000 - 0.2111 * 10000) / 10000; var i = 9.99999999999999930000e20; // 小于le+21的數(shù)字縱然我們用科學(xué)計(jì)數(shù)法表示, 但輸出時(shí)也會(huì)是完整數(shù)字。var j = 9.99999999999999940000e20; // 發(fā)生了舍入, 大于le+21, 使用科學(xué)計(jì)數(shù)法輸出var k = 1e21; // 科學(xué)計(jì)數(shù)法var l = 0.0000001; // 默認(rèn)把具有6個(gè)或6個(gè)以上前導(dǎo)0的浮點(diǎn)數(shù)轉(zhuǎn)換成科學(xué)計(jì)數(shù)法。// 在所有數(shù)字運(yùn)算中, JavaScript會(huì)嘗試將字符串轉(zhuǎn)換為數(shù)字。var m = "100" / "10"; // 結(jié)果是10var n = "100" * "10"; // 結(jié)果是1000var o = "100" - "10"; // 結(jié)果是90var p = "10" + "20"; // 結(jié)果是1020var q = 10 + "20"; // 結(jié)果是1020var r = "10" + 20; // 結(jié)果是1020var s = 10 + 20 + "30"; // 結(jié)果是3030var t = 10 + "20" + 30; // 結(jié)果是102030var u = isNaN("111"); // 返回falsevar v = isNaN("111a"); // 返回truevar w = isNaN(NaN); // 返回true, 因?yàn)镹aN不是數(shù)var x = typeof(NaN); // 返回numbervar y = isFinite(111); // 返回truevar z = isFinite("111"); // 返回truevar A = isFinite("111a"); // 返回falsevar B = isFinite(Infinity); // 返回false, 因?yàn)镮nfinity是正無(wú)窮大var C = isFinite(-Infinity); // 返回false, 因?yàn)?Infinity是負(fù)無(wú)窮大var D = isFinite(NaN); // 返回false, 因?yàn)镹aN非數(shù)字var E = typeof(Infinity); // 返回numbervar F = typeof(-Infinity); // 返回numbervar G = isNaN(Infinity); // 返回false, 因?yàn)镮nfinity是正無(wú)窮數(shù)var H = isNaN(-Infinity); // 返回false, 因?yàn)?Infinity是負(fù)無(wú)窮數(shù)var I = 011; // 八進(jìn)制數(shù), E將是9var J = 0xFF; // 十六進(jìn)制數(shù), F將是255document.write('a = ' + a + '<br />');document.write('b = ' + b + '<br />');document.write('c = ' + c + '<br />');document.write('d = ' + d + '<br />');document.write('e = ' + e + '<br />');document.write('f = ' + f + '<br />');document.write('g = ' + g + '<br />');document.write('h = ' + h + '<br />');document.write('i = ' + i + '<br />');document.write('j = ' + j + '<br />');document.write('k = ' + k + '<br />');document.write('l = ' + l + '<br />');document.write('"100" / "10" = ' + m + '<br />');document.write('"100" * "10" = ' + n + '<br />');document.write('"100" - "10" = ' + o + '<br />');document.write('"10" + "20" = ' + p + '<br />');document.write('10 + "20" = ' + q + '<br />');document.write('"10" + 20 = ' + r + '<br />');document.write('10 + 20 + "30" = ' + s + '<br />');document.write('10 + "20" + 30 = ' + t + '<br />');document.write('isNaN("111") = ' + u + '<br />');document.write('isNaN("111a") = ' + v + '<br />');document.write('isNaN(NaN) = ' + w + '<br />');document.write('typeof(NaN) = ' + x + '<br />');document.write('isFinite(111) = ' + y + '<br />');document.write('isFinite("111") = ' + z + '<br />');document.write('isFinite("111a") = ' + A + '<br />');document.write('isFinite(Infinity) = ' + B + '<br />');document.write('isFinite(-Infinity) = ' + C + '<br />');document.write('isFinite(NaN) = ' + D + '<br />');document.write('typeof(Infinity) = ' + E + '<br />');document.write('typeof(-Infinity) = ' + F + '<br />');document.write('isNaN(Infinity) = ' + G + '<br />');document.write('isNaN(-Infinity) = ' + H + '<br />');document.write('I = ' + I + '<br />');document.write('J = ' + J + '<br />');</script></body> </html>11.2. 效果圖
總結(jié)
以上是生活随笔為你收集整理的022_JavaScript数字的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 021_字符串方法
- 下一篇: 023_JavaScript数字方法