官术网_书友最值得收藏!

1.2 Number類型詳解

1.2.1 Number類型介紹

在JavaScript中,Number類型的數(shù)據(jù)既包括了整型數(shù)據(jù),也包括了浮點(diǎn)型數(shù)據(jù)。

下面講解整型數(shù)據(jù)的處理規(guī)則。最基本的數(shù)值采用的是十進(jìn)制整數(shù),另外,數(shù)值還可以通過八進(jìn)制或者十六進(jìn)制表示。

① 八進(jìn)制。如果想要用八進(jìn)制表示一個(gè)數(shù)值,那么首位必須是0,其他位必須是0~7的八進(jìn)制序列。如果后面位數(shù)的字面值大于7,則破壞了八進(jìn)制數(shù)據(jù)表示規(guī)則,前面的0會(huì)被忽略,當(dāng)作十進(jìn)制數(shù)據(jù)處理。


var num1 = 024; // 20
var num2 = 079; // 79

其中num1首位為0,表示八進(jìn)制數(shù),然后判斷后面每位數(shù)值在0~7內(nèi),符合八進(jìn)制數(shù)據(jù)表示規(guī)則,最后將其轉(zhuǎn)換為十進(jìn)制數(shù)值2×8 + 4 = 20。

num2首位為0,表示八進(jìn)制數(shù),然后判斷后面每位的數(shù)值,最后一位9超出了八進(jìn)制字面值,所以不屬于八進(jìn)制數(shù)據(jù),最終按照十進(jìn)制處理,結(jié)果為79。

② 十六進(jìn)制。如果想要用十六進(jìn)制表示一個(gè)數(shù)值,那么前兩位必須是0x,其他位必須是十六進(jìn)制序列(0~9,a~f或者A~F)。如果超過了十六進(jìn)制序列,則會(huì)拋出異常。


var num3 = 0x3f;  // 63
var num4 = 0x2g;  // SyntaxError: Invalid or unexpected token

其中num3前兩位為0x,表示十六進(jìn)制數(shù)據(jù),然后判斷后面每位均屬于十六進(jìn)制字面值區(qū)間,符合十六進(jìn)制數(shù)表示,最后將其轉(zhuǎn)換為十進(jìn)制數(shù)值3×16+15=63。

num4前兩位為0x,表示十六進(jìn)制數(shù)據(jù),然后判斷后面每位數(shù)值,最后一位g超出了十六進(jìn)制所能表示的字面值區(qū)間,所以不滿足十六進(jìn)制數(shù)據(jù)表示規(guī)則,最終拋出異常“SyntaxError:Invalid or unexpected token”。

此外,和Boolean類型一樣,當(dāng)其他類型在與Number類型進(jìn)行數(shù)據(jù)轉(zhuǎn)換時(shí),也會(huì)遵循一定的規(guī)則。

(1)Boolean類型轉(zhuǎn)換為Number類型

· true轉(zhuǎn)換為1。

· false轉(zhuǎn)換為0。

(2)Null類型轉(zhuǎn)換為Number類型

· Null類型只有一個(gè)字面值null,直接轉(zhuǎn)換為0。

(3)Undefined類型轉(zhuǎn)換為Number類型

· Undefined類型只有一個(gè)字面值undefined,直接轉(zhuǎn)換為NaN。

(4)String類型轉(zhuǎn)換為Number類型

· 如果字符串中只包含數(shù)字,則會(huì)轉(zhuǎn)換成十進(jìn)制數(shù);如果前面有0,會(huì)直接省略掉,例如"0123"會(huì)轉(zhuǎn)換為123。

· 如果字符串中包含的是有效的浮點(diǎn)數(shù),則同樣按照十進(jìn)制轉(zhuǎn)換,例如"1.23"會(huì)轉(zhuǎn)換為1.23。

· 如果字符串中包含有效的十六進(jìn)制格式,則會(huì)按照十進(jìn)制轉(zhuǎn)換,例如"0x3f"會(huì)轉(zhuǎn)換為63。

· 如果是空字符串,則轉(zhuǎn)換為0。

· 如果字符串中包含了除上述格式以外的字符串,則會(huì)直接轉(zhuǎn)換為NaN。

(5)Object類型轉(zhuǎn)換為Number類型

· Object類型在轉(zhuǎn)換為Number類型時(shí),會(huì)優(yōu)先調(diào)用valueOf()函數(shù),然后通過valueOf()函數(shù)的返回值按照上述規(guī)則進(jìn)行轉(zhuǎn)換。如果轉(zhuǎn)換的結(jié)果是NaN,則調(diào)用toString()函數(shù),通過toString()函數(shù)的返回值重新按照上述規(guī)則進(jìn)行轉(zhuǎn)換;如果有確定的Number類型返回值,則結(jié)束,否則返回“NaN”。

Number類型作為一種常用的基本數(shù)據(jù)類型,開發(fā)人員在使用時(shí)往往會(huì)因?yàn)闆]有理解到原理而踩到一些隱形坑。接下來就講解在使用Number類型數(shù)據(jù)或者函數(shù)時(shí),需要注意的一些點(diǎn)。

主站蜘蛛池模板: 普兰店市| 五华县| 巴马| 师宗县| 新野县| 巫溪县| 吴堡县| 伊金霍洛旗| 禹州市| 札达县| 三都| 葵青区| 壶关县| 延边| 尼勒克县| 陇川县| 三台县| 德江县| 双城市| 泗阳县| 宜兰市| 中方县| 贵溪市| 博客| 冷水江市| 湟源县| 萨嘎县| 巴楚县| 临泉县| 英吉沙县| 澄江县| 凌源市| 奉节县| 抚州市| 南投县| 安泽县| 社旗县| 衡山县| 鄯善县| 寿宁县| 朝阳区|