成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

數(shù)據(jù)類型 數(shù)值

lavor / 3418人閱讀

摘要:報(bào)錯報(bào)錯報(bào)錯有前導(dǎo)的數(shù)值會被視為八進(jìn)制,但是如果前導(dǎo)后面有數(shù)字和,則該數(shù)值被視為十進(jìn)制。對于那些會自動轉(zhuǎn)為科學(xué)計(jì)數(shù)法的數(shù)字,會將科學(xué)計(jì)數(shù)法的表示方法視為字符串,因此導(dǎo)致一些奇怪的結(jié)果。

1.概述
1.1整數(shù)和浮點(diǎn)數(shù)
1.2數(shù)值精度
1.3數(shù)值范圍
2.數(shù)值的表示法
3.數(shù)值的進(jìn)制
4.特殊數(shù)值
4.1正零和負(fù)零
4.2NaN
4.3Infinity
5.與數(shù)值相關(guān)的全局方法
5.1parseInt()
5.2parseFloat()
5.3isNaN()
5.4isFinite()

1.概述
1.1整數(shù)和浮點(diǎn)數(shù)

所有數(shù)字都是以64位浮點(diǎn)數(shù)形式儲存

JavaScript 語言的底層根本沒有整數(shù),所有數(shù)字都是小數(shù)

由于浮點(diǎn)數(shù)不是精確的值,所以涉及小數(shù)的比較和運(yùn)算要特別小心。

0.1 + 0.2 === 0.3
// false

0.3 / 0.1
// 2.9999999999999996

(0.3 - 0.2) === (0.2 - 0.1)
// false

1.2數(shù)值精度

的64個二進(jìn)制位,從最左邊開始,是這樣組成的。

第1位:符號位,0表示正數(shù),1表示負(fù)數(shù)
第2位到第12位(共11位):指數(shù)部分
第13位到第64位(共52位):小數(shù)部分(即有效數(shù)字

如果指數(shù)部分的值在0到2047之間(不含兩個端點(diǎn)),那么有效數(shù)字的第一位默認(rèn)總是1,不保存在64位浮點(diǎn)數(shù)之中
(-1)^符號位 1.xx...xx 2^指數(shù)部分

1.3數(shù)值范圍
64位浮點(diǎn)數(shù)的指數(shù)部分的長度是11個二進(jìn)制位,意味著指數(shù)部分的最大值是2047(2的11次方減1)

64位浮點(diǎn)數(shù)的指數(shù)部分的值最大為2047,分出一半表示負(fù)數(shù),則 JavaScript 能夠表示的數(shù)值范圍為21024到2-1023(開區(qū)間),超出這個范圍的數(shù)無法表示。

如果一個數(shù)大于等于2的1024次方,那么就會發(fā)生“正向溢出”,即 JavaScript 無法表示這么大的數(shù),這時就會返回Infinity。

Math.pow(2, 1024) // Infinity
如果一個數(shù)小于等于2的-1075次方(指數(shù)部分最小值-1023,再加上小數(shù)部分的52位),那么就會發(fā)生為“負(fù)向溢出”,即 JavaScript 無法表示這么小的數(shù),這時會直接返回0。

Math.pow(2, -1075) // 0

var x = 0.5;

for(var i = 0; i < 25; i++) {
x = x * x;
}

x // 0
上面代碼中,對0.5連續(xù)做25次平方,由于最后結(jié)果太接近0,超出了可表示的范圍,JavaScript 就直接將其轉(zhuǎn)為0。

JavaScript 提供Number對象的MAX_VALUE和MIN_VALUE屬性,返回可以表示的具體的最大值和最小值。

Number.MAX_VALUE // 1.7976931348623157e+308
Number.MIN_VALUE // 5e-324

2.數(shù)值的表示法
除了35(十進(jìn)制)和0xFF(十六進(jìn)制)。

數(shù)值也可以采用科學(xué)計(jì)數(shù)法表示,下面是幾個科學(xué)計(jì)數(shù)法的例子。

123e3 // 123000
123e-3 // 0.123
-3.1E+12
.1e-23
科學(xué)計(jì)數(shù)法允許字母e或E的后面,跟著一個整數(shù),表示這個數(shù)值的指數(shù)部分

3.數(shù)值的進(jìn)制
4.特殊數(shù)值

十進(jìn)制:沒有前導(dǎo)0的數(shù)值。
八進(jìn)制:有前綴0o或0O的數(shù)值,或者有前導(dǎo)0、且只用到0-7的八個阿拉伯?dāng)?shù)字的數(shù)值。
十六進(jìn)制:有前綴0x或0X的數(shù)值。
二進(jìn)制:有前綴0b或0B的數(shù)值

如果八進(jìn)制、十六進(jìn)制、二進(jìn)制的數(shù)值里面,出現(xiàn)不屬于該進(jìn)制的數(shù)字,就會報(bào)錯。

0xzz // 報(bào)錯
0o88 // 報(bào)錯
0b22 // 報(bào)錯

有前導(dǎo)0的數(shù)值會被視為八進(jìn)制,但是如果前導(dǎo)0后面有數(shù)字8和9,則該數(shù)值被視為十進(jìn)制。

0888 // 888
0777 // 511

4.1正零和負(fù)零
區(qū)別就是64位浮點(diǎn)數(shù)表示法的符號位不同。它們是等價的。

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

幾乎所有場合,正零和負(fù)零都會被當(dāng)作正常的0。

+0 // 0
-0 // 0
(-0).toString() // "0"
(+0).toString() // "0"
唯一有區(qū)別的場合是,+0或-0當(dāng)作分母,返回的值是不相等的。

(1 / +0) === (1 / -0) // false
上面的代碼之所以出現(xiàn)這樣結(jié)果,是因?yàn)槌哉愕玫?Infinity,除以負(fù)零得到-Infinity,這兩者是不相等的(關(guān)于Infinity詳見下文)。

4.2NaN

非數(shù)字
將字符串解析成數(shù)字出錯的場合。
一些數(shù)學(xué)函數(shù)的運(yùn)算結(jié)果會出現(xiàn)NaN。

Math.acos(2) // NaN
Math.log(-1) // NaN
Math.sqrt(-1) // NaN
0除以0也會得到NaN。

0 / 0 // NaN

NaN不等于任何值,包括它本身。

NaN === NaN // false
數(shù)組的indexOf方法內(nèi)部使用的是嚴(yán)格相等運(yùn)算符,所以該方法對NaN不成立。

[NaN].indexOf(NaN) // -1
NaN在布爾運(yùn)算時被當(dāng)作false。

Boolean(NaN) // false
NaN與任何數(shù)(包括它自己)的運(yùn)算,得到的都是NaN。

NaN + 32 // NaN
NaN - 32 // NaN
NaN * 32 // NaN
NaN / 32 // NaN

4.3Infinity
0除以0等于nan
其他0當(dāng)除數(shù)0
0當(dāng)被除數(shù)正 無窮被除為0
0 * Infinity // NaN
1 / -0 // -Infinity
-1 / -0 // Infinity
Infinity與NaN比較,總是返回false。

Infinity > NaN // false
-Infinity > NaN // false

Infinity < NaN // false
-Infinity < NaN // false

(2)運(yùn)算規(guī)則
很普通數(shù)
5 * Infinity // Infinity
5 - Infinity // -Infinity
Infinity / 5 // Infinity
5 / Infinity // 0

跟0
0 * Infinity // NaN
0 / Infinity // 0
Infinity / 0 // Infinity
加減乘除
Infinity - Infinity // NaN
Infinity / Infinity // NaN
Infinity + Infinity // Infinity
Infinity * Infinity // Infinity

5.與數(shù)值相關(guān)的全局方法
5.1parseInt(字符串,進(jìn)制數(shù)2-36)
parseInt方法用于將字符串轉(zhuǎn)為整數(shù)
返回nan或者十進(jìn)值

回先string轉(zhuǎn)為字符串再轉(zhuǎn)化
有多少轉(zhuǎn)多少
1.如果字符串頭部有空格,空格會被自動去除。

parseInt(" 81") // 81

2.如果字符串以0x或0X開頭,parseInt會將其按照十六進(jìn)制數(shù)解析。

parseInt("0x10") // 16
如果字符串以0開頭,將其按照10進(jìn)制解析。

parseInt("011") // 11
對于那些會自動轉(zhuǎn)為科學(xué)計(jì)數(shù)法的數(shù)字,parseInt會將科學(xué)計(jì)數(shù)法的表示方法視為字符串,因此導(dǎo)致一些奇怪的結(jié)果。

parseInt(1000000000000000000000.5) // 1
// 等同于
parseInt("1e+21") // 1

parseInt(0.0000008) // 8
// 等同于
parseInt("8e-7") // 8

(2)進(jìn)制轉(zhuǎn)換

如果第二個參數(shù)不是數(shù)值,會被自動轉(zhuǎn)為一個整數(shù)。這個整數(shù)只有在2到36之間,才能得到有意義的結(jié)果,超出這個范圍,則返回NaN。如果第二個參數(shù)是0、undefined和null,則直接忽略。

parseInt("10", 37) // NaN
parseInt("10", 1) // NaN
parseInt("10", 0) // 10
parseInt("10", null) // 10
parseInt("10", undefined) // 10

如果字符串包含對于指定進(jìn)制無意義的字符,則從最高位開始,只返回可以轉(zhuǎn)換的數(shù)值。如果最高位無法轉(zhuǎn)換,則直接返回NaN。

parseInt("1546", 2) // 1
parseInt("546", 2) // NaN

前面說過,如果parseInt的第一個參數(shù)不是字符串,會被先轉(zhuǎn)為字符串。這會導(dǎo)致一些令人意外的結(jié)果。

parseInt(0x11, 36) // 43
parseInt(0x11, 2) // 1

// 等同于
parseInt(String(0x11), 36)
parseInt(String(0x11), 2)

// 等同于
parseInt("17", 36)
parseInt("17", 2)
上面代碼中,十六進(jìn)制的0x11會被先轉(zhuǎn)為十進(jìn)制的17,再轉(zhuǎn)為字符串。然后,再用36進(jìn)制或二進(jìn)制解讀字符串17,最后返回結(jié)果43和1。

這種處理方式,對于八進(jìn)制的前綴0,尤其需要注意。

parseInt(011, 2) // NaN

// 等同于
parseInt(String(011), 2)

// 等同于
parseInt(String(9), 2)
上面代碼中,第一行的011會被先轉(zhuǎn)為字符串9,因?yàn)?不是二進(jìn)制的有效字符,所以返回NaN。如果直接計(jì)算parseInt("011", 2),011則是會被當(dāng)作二進(jìn)制處理,返回3。
5.2parseFloat()

parseFloat方法用于將一個字符串轉(zhuǎn)為浮點(diǎn)數(shù)

1.多少符合轉(zhuǎn)多少
2.如果字符串符合科學(xué)計(jì)數(shù)法,則會進(jìn)行相應(yīng)的轉(zhuǎn)換。

parseFloat("314e-2") // 3.14
parseFloat("0.0314E+2") // 3.14
3.如果參數(shù)不是字符串,或者字符串的第一個字符不能轉(zhuǎn)化為浮點(diǎn)數(shù),則返回NaN 空字符串也是nan
這些特點(diǎn)使得parseFloat的轉(zhuǎn)換結(jié)果不同于Number函數(shù)。

parseFloat(true) // NaN
Number(true) // 1

parseFloat(null) // NaN
Number(null) // 0

parseFloat("") // NaN
Number("") // 0

parseFloat("123.45#") // 123.45
Number("123.45#") // NaN

5.3isNaN()
Nan===nan假
isNaN(NaN) // true
先number()再判斷

真 字符串 對象 undefined
假 空數(shù)組 只有一個數(shù)值的數(shù)組
isNaN([]) // false
isNaN([123]) // false
isNaN(["123"]) // false

因此,使用isNaN之前,最好判斷一下數(shù)據(jù)類型。

function myIsNaN(value) {
return typeof value === "number" && isNaN(value);
}
判斷NaN更可靠的方法是,利用NaN為唯一不等于自身的值的這個特點(diǎn),進(jìn)行判斷。

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

5.4isFinite()

真假,是否正常值
除了Infinity、-Infinity、NaN和undefined這幾個值會返回false

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/106030.html

相關(guān)文章

  • 【JavaScript】數(shù)據(jù)類型

    摘要:數(shù)值轉(zhuǎn)換有個函數(shù)可以把非數(shù)值轉(zhuǎn)換為數(shù)值和轉(zhuǎn)型函數(shù)可以用于任何數(shù)據(jù)類型,后面兩個是專門用于把字符串轉(zhuǎn)換為數(shù)值。類型類型用于表示由零或多個位字符組成的字符序列,即字符串。 2.4 數(shù)據(jù)類型 ECMAScript中有5種簡單數(shù)據(jù)類型(基本數(shù)據(jù)類型):Undefined、Null、Boolean、Number和String。還有1種復(fù)雜數(shù)據(jù)類型--Object,Object本質(zhì)上是由一組無序的...

    ashe 評論0 收藏0
  • 我的javascript學(xué)習(xí)筆記之數(shù)據(jù)類型

    摘要:中的對象其實(shí)就是一組數(shù)據(jù)和功能的集合。對象可以通過執(zhí)行操作符后跟要創(chuàng)建的對象類型的名稱來創(chuàng)建。而創(chuàng)建類型的實(shí)例并為其添加屬性和或方法,就可以創(chuàng)建自定義對象,如下所示 數(shù)據(jù)類型 ECMAscript有五種簡單數(shù)據(jù)類型:Undefined,Null,Boolean,String,Number,還有一種復(fù)雜數(shù)據(jù)類型Object,Object本質(zhì)上是由一組無序的名值組成的. 1.Undefin...

    hss01248 評論0 收藏0
  • 一眼看穿

    摘要:,返回對象的字符串表示。布爾操作符邏輯非號表示返回一個布爾值,可以應(yīng)用于中的任何值規(guī)則如果操作數(shù)是一個對象,返回如果操作數(shù)是一個空字符串,返回如果操作數(shù)是一個非空字符串,返回如果操作數(shù)是數(shù)值,返回如果操作數(shù)是任 前段時間忙,好久沒更新了,繼續(xù)梳理基礎(chǔ)知識這期總結(jié)的是JS的基本概念 標(biāo)識符 所謂的標(biāo)識符是指變量,函數(shù)屬性的名字,或者函數(shù)的參數(shù) 第一個字符必須是一個字母,下劃線(_)或者一...

    jsdt 評論0 收藏0
  • 數(shù)據(jù)類型

    摘要:下表給出了各種數(shù)據(jù)類型以及對其對應(yīng)的轉(zhuǎn)換規(guī)則。例如轉(zhuǎn)換為字符串?dāng)?shù)值布爾值對象和字符串值調(diào)用都會返回字符串的一個副本,但和值沒有這個方法。返回對象的字符串?dāng)?shù)值或布爾值表示。 數(shù)據(jù)類型 ECMAScript中有5種簡單的數(shù)據(jù)類型(也稱基本數(shù)據(jù)類型)和 一種復(fù)雜數(shù)據(jù)類型(也稱引用類型) 基本數(shù)據(jù)類型:Undefined、Null、Boolean、Number、String 引用類型:obj...

    娣辯孩 評論0 收藏0
  • JavaScript基本語法(一)

    摘要:目錄語句變量小結(jié)基本語法一是核心知識點(diǎn)的基本語法的第一部分,主要介紹了語句表達(dá)式變量和數(shù)據(jù)類型不包括函數(shù)類型的基本知識點(diǎn),函數(shù)類型將在下一章函數(shù)二中詳細(xì)探討語句程序的執(zhí)行是由一條條語句組成的每一條語句是為完成特定任務(wù)而執(zhí)行的操作語句當(dāng)中可以 目錄 1. 語句 2. 變量 3. 小結(jié) JavaScript基本語法(一)是JavaScript核心知識點(diǎn)(ECMAScript)的基本語法的...

    shiina 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<