最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

JavaScript中的數(shù)值

2023-08-21 10:55 作者:曉楓Motivation  | 我要投稿

JavaScript中的主要數(shù)值類型是Number類型,用于表示整數(shù)和近似的實(shí)數(shù)。JavaScript采用了由IEEE 754標(biāo)準(zhǔn)定義的64位浮點(diǎn)格式來表示數(shù)值。這意味著JavaScript可以表示最大整數(shù)±1.797 693 134 862 315 7 × 10^308和最小整數(shù)±5 × 10^-324。

JavaScript中的這種數(shù)值格式允許我們準(zhǔn)確表示介于-9,007,199,254,740,992(-2^53)和9,007,199,254,740,992(2^53)之間的所有整數(shù)。如果您的值超出此范圍,可能會在最低有效位處喪失一些精度。

當(dāng)一個(gè)數(shù)值直接出現(xiàn)在JavaScript程序中時(shí),它被稱為“數(shù)值字面量”。請注意,任何數(shù)值字面量都可以在前面加上減號(-)以使值為負(fù)。

1. 整數(shù)字面量.

在JavaScript程序中,十進(jìn)制整數(shù)可以直接寫為數(shù)字序列。例如:

除了十進(jìn)制整數(shù)字面量,JavaScript還支持十六進(jìn)制(基數(shù)16)的值。十六進(jìn)制字面量以0x或0X開頭,后面跟著十六進(jìn)制數(shù)字字符串。十六進(jìn)制數(shù)字由數(shù)字0到9和字母a(或A)到f(或F)組成,其中a到f代表10到15。以下是十六進(jìn)制整數(shù)字面量的示例:

在ES6及更高版本中,您還可以使用前綴0b和0o(或0B和0O)來表示二進(jìn)制(基數(shù)2)或八進(jìn)制(基數(shù)8)的整數(shù):

(程序員的軟技能:ke.qq.com/course/6034346)

2. 浮點(diǎn)數(shù)字面量.

浮點(diǎn)數(shù)字面量可以包含小數(shù)點(diǎn),并遵循實(shí)數(shù)的傳統(tǒng)語法。實(shí)數(shù)由數(shù)字的整數(shù)部分、小數(shù)點(diǎn)和數(shù)字的小數(shù)部分組成。

浮點(diǎn)數(shù)字面量還可以使用指數(shù)表示法,其中實(shí)數(shù)后跟字母e(或E),一個(gè)可選的加號或減號,以及一個(gè)整數(shù)指數(shù)。這種表示法表示實(shí)數(shù)乘以10的指數(shù)次冪。

更簡潔的語法形式為:

例如:

您可以使用下劃線來分隔數(shù)值字面量的各個(gè)部分,這是一種已進(jìn)入標(biāo)準(zhǔn)化后期并受到所有主要瀏覽器和Node實(shí)現(xiàn)支持的功能:

(程序員的軟技能:ke.qq.com/course/6034346)

3. JavaScript中的算術(shù)運(yùn)算。

JavaScript程序使用語言提供的算術(shù)運(yùn)算符來操作數(shù)值。這些運(yùn)算符包括加法+、減法-、乘法*、除法/和取模(除法后的余數(shù))%。ES2016引入了指數(shù)運(yùn)算符**。

除了這些基本的算術(shù)運(yùn)算符,JavaScript還通過Math對象提供了一組函數(shù)和常量,以支持更復(fù)雜的數(shù)學(xué)計(jì)算:

ES6在Math對象上引入了一組新的函數(shù):

在JavaScript中,算術(shù)不會在遇到溢出、下溢或除以零時(shí)拋出錯(cuò)誤。當(dāng)數(shù)值操作的結(jié)果超出可表示范圍(溢出)時(shí),結(jié)果是特殊的無限值Infinity。類似地,當(dāng)負(fù)數(shù)的絕對值超出負(fù)數(shù)的可表示范圍(下溢)時(shí),結(jié)果為負(fù)無窮-Infinity。這兩個(gè)無限值的行為符合預(yù)期:涉及加法、減法、乘法或除法的任何算術(shù)運(yùn)算都會導(dǎo)致無限值(盡管符號可能會改變)。

當(dāng)數(shù)值操作的結(jié)果接近零但仍大于最小可表示數(shù)時(shí),發(fā)生下溢。在這種情況下,JavaScript返回0。如果下溢發(fā)生在倒數(shù)的情況下,JavaScript返回一個(gè)稱為“負(fù)零”的特殊值。這個(gè)值與普通零幾乎無法區(qū)分,對于JavaScript程序員來說很少會引起關(guān)注。

在JavaScript中,除以零不是錯(cuò)誤;它只會導(dǎo)致無限或負(fù)無窮。然而,有一個(gè)例外:將0除以0會得到一個(gè)稱為“非數(shù)”(NaN)的特殊值。此外,類似無限除以無限、負(fù)數(shù)的平方根或在算術(shù)運(yùn)算中使用NaN作為操作數(shù)等操作都會產(chǎn)生NaN作為結(jié)果。

JavaScript預(yù)定義了全局常量Infinity和NaN,分別對應(yīng)正無窮大和非數(shù)。這些值也可以通過Number對象的屬性訪問:

ES6在Number對象上引入了以下屬性:

在JavaScript中,NaN具有一種不尋常的特性:它既不等于任何值,也不等于自身。這意味著您不能通過使用x === NaN比較來確定變量x是否為NaN。相反,您必須使用x != x或Number.isNaN(x)來測試NaN。這兩個(gè)表達(dá)式只在x與全局常量NaN具有相同值時(shí)才返回true。

全局函數(shù)isNaN()與Number.isNaN()類似。當(dāng)參數(shù)為NaN或參數(shù)為不能轉(zhuǎn)換為數(shù)字的非數(shù)值時(shí),它返回true。相關(guān)的函數(shù)Number.isFinite()在參數(shù)不是NaN、Infinity或-Infinity時(shí)返回true。全局函數(shù)isFinite()在參數(shù)為有限數(shù)或可轉(zhuǎn)換為有限數(shù)的值時(shí)返回true。

負(fù)零具有稍微不尋常的行為。它被認(rèn)為等于正零(即使在JavaScript中使用嚴(yán)格相等比較),這意味著除了作為除數(shù)的角色外,很難區(qū)分這兩個(gè)值:

(程序員的軟技能:ke.qq.com/course/6034346)

4. 二進(jìn)制浮點(diǎn)數(shù)和舍入誤差。

實(shí)數(shù)是無限多的,但JavaScript的浮點(diǎn)數(shù)格式只能表示其中的有限子集(確切地說,它可以表示多達(dá)18,437,736,874,454,810,627個(gè)不同的值)。這意味著當(dāng)您在JavaScript中使用實(shí)數(shù)時(shí),您操作的數(shù)值通常是實(shí)際值的近似值。

JavaScript(以及所有現(xiàn)代編程語言)使用IEEE-754浮點(diǎn)表示,這是一種二進(jìn)制表示。這種表示可以準(zhǔn)確地表示像1/2、1/8和1/1024這樣的分?jǐn)?shù)。然而,我們常用的最常見的分?jǐn)?shù)(尤其是在財(cái)務(wù)計(jì)算中)是十進(jìn)制分?jǐn)?shù),如1/10、1/100等。二進(jìn)制浮點(diǎn)表示無法精確表示甚至簡單的數(shù)字如0.1。

雖然JavaScript的數(shù)值具有足夠的精度,可以非常接近地近似0.1,但不能完全表示它。這可能會導(dǎo)致問題,如以下代碼所示:

由于舍入誤差,近似值0.3和0.2之間的差異不等于近似值0.2和0.1之間的差異。這不是JavaScript特定的問題;這是所有使用二進(jìn)制浮點(diǎn)數(shù)的編程語言的常見問題。還要注意,上述代碼中的x和y的值非常接近,它們非常接近正確的值。計(jì)算出的值對于大多數(shù)目的來說都是完全合適的,但不建議嘗試比較它們的精確相等性。

如果近似浮點(diǎn)值在您的程序中造成問題,您可以考慮使用等價(jià)的整數(shù)。例如,在處理與貨幣相關(guān)的計(jì)算時(shí),您可以使用以分為單位的整數(shù)表示,而不是以美元的一部分為單位的分?jǐn)?shù)。

(程序員的軟技能:ke.qq.com/course/6034346)

5. 用BigInt表示任意精度整數(shù)。

在ES2020中,JavaScript引入了一種新的數(shù)字類型,稱為BigInt。截至2020年初,Chrome、Firefox、Edge和Node.js已經(jīng)實(shí)現(xiàn)了這種類型,Safari也在進(jìn)行相關(guān)工作。正如名稱所示,BigInt值是整數(shù)。添加此類型的主要動機(jī)是為了表示64位整數(shù),這對于與許多其他語言和API的兼容性至關(guān)重要。然而,BigInt值可以具有數(shù)千甚至數(shù)百萬位的數(shù)字,以滿足大數(shù)值的需求(盡管BigInt實(shí)現(xiàn)不適合用于加密,因?yàn)樗鼈儾豢紤]防御定時(shí)攻擊)。

BigInt字面量由一系列數(shù)字后跟小寫字母"n"組成。默認(rèn)情況下,基數(shù)為10,但您可以使用前綴0b、0o和0x分別表示二進(jìn)制、八進(jìn)制和十六進(jìn)制的BigInt:

您可以使用BigInt()函數(shù)將常規(guī)JavaScript數(shù)字或字符串轉(zhuǎn)換為BigInt值:

與BigInt值的算術(shù)操作類似于常規(guī)JavaScript數(shù)字操作,除法除去余數(shù)并朝向零四舍五入:

盡管標(biāo)準(zhǔn)的+、-、*、/、%和**運(yùn)算符適用于BigInt,但您不能將BigInt操作數(shù)與常規(guī)數(shù)字操作數(shù)混合使用。乍看起來,這個(gè)規(guī)則可能有點(diǎn)奇怪,但實(shí)際上是合理的。如果一個(gè)數(shù)值類型比另一個(gè)更通用,那么定義混合操作數(shù)計(jì)算并返回更通用的類型是很容易的。然而,在這種情況下,這兩種類型都不比另一種更通用:BigInt可以表示非常大的值,使其在常規(guī)數(shù)值類型之間更通用。但是BigInt只能表示整數(shù),這使得常規(guī)JavaScript數(shù)值類型在這個(gè)方面更通用。這種困境無法解決,因此在使用算術(shù)運(yùn)算符時(shí),JavaScript簡單地禁止混合使用這兩種操作數(shù)類型。

另一方面,比較運(yùn)算符允許混合操作數(shù)類型:

位運(yùn)算符通??梢耘cBigInt操作數(shù)一起使用。然而,Math對象的函數(shù)中沒有一個(gè)接受BigInt操作數(shù)。

(程序員的軟技能:ke.qq.com/course/6034346)

6. 日期和時(shí)間。

JavaScript提供了一個(gè)簡單的Date類,用于表示和操作與日期和時(shí)間有關(guān)的數(shù)據(jù)。JavaScript的Date是一個(gè)對象,但它也具有一個(gè)數(shù)值表示,稱為時(shí)間戳,它是自1970年1月1日以來的毫秒數(shù):

(程序員的軟技能:ke.qq.com/course/6034346)


JavaScript中的數(shù)值的評論 (共 條)

分享到微博請遵守國家法律
汝南县| 铜鼓县| 呼和浩特市| 吴川市| 凤阳县| 将乐县| 汉源县| 大姚县| 法库县| 平塘县| 广水市| 资源县| 蛟河市| 渝中区| 甘泉县| 永宁县| 太仓市| 蓬莱市| 兴山县| 安岳县| 简阳市| 胶州市| 淳安县| 长宁区| 芷江| 库车县| 微山县| 临洮县| 平乐县| 文山县| 新巴尔虎左旗| 丁青县| 淳化县| 英超| 普安县| 锡林郭勒盟| 荣成市| 清河县| 石台县| 池州市| 平乡县|