js中的數(shù)字筆記

好吧,本來想理解理解js數(shù)字存儲(chǔ)原理的渡嚣〗嗾蹋看來我還是嫩,只有先記下一些重要的先了缕棵。
參考鏈接:http://javascript.ruanyifeng.com/grammar/number.html#toc3孵班。
里面講的很詳細(xì),這里只做摘要招驴。

1. 概述#

1.1整數(shù)和浮點(diǎn)數(shù)

JavaScript內(nèi)部篙程,所有數(shù)字都是以64位浮點(diǎn)數(shù)形式儲(chǔ)存,即使整數(shù)也是如此别厘。所以虱饿,1與1.0是相同的,是同一個(gè)數(shù)触趴。由于浮點(diǎn)數(shù)不是精確的值氮发,所以涉及小數(shù)的比較和運(yùn)算要特別小心。

1 === 1.0 // true
0.1 + 0.2 === 0.3// false
0.3 / 0.1// 2.9999999999999996
(0.3 - 0.2) === (0.2 - 0.1)// false
//真正開發(fā)中的解決方法冗懦,后續(xù)尋找

1.2 數(shù)值范圍##

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

1.3 數(shù)值的進(jìn)制##

  1. 十進(jìn)制:沒有前導(dǎo)0的數(shù)值爽冕。
  2. 八進(jìn)制:有前綴0o或0O的數(shù)值,或者有前導(dǎo)0批狐、且只用到0-7的七個(gè)阿拉伯?dāng)?shù)字的數(shù)值扇售。
  3. 十六進(jìn)制:有前綴0x或0X的數(shù)值。
  4. 二進(jìn)制:有前綴0b或0B的數(shù)值嚣艇。

默認(rèn)情況下承冰,JavaScript內(nèi)部會(huì)自動(dòng)將八進(jìn)制、十六進(jìn)制食零、二進(jìn)制轉(zhuǎn)為十進(jìn)制困乒。下面是一些例子。

0xff // 255
0o377 // 255
0b11 // 3

如果八進(jìn)制贰谣、十六進(jìn)制娜搂、二進(jìn)制的數(shù)值里面,出現(xiàn)不屬于該進(jìn)制的數(shù)字吱抚,就會(huì)報(bào)錯(cuò)百宇。

0xzz // 報(bào)錯(cuò),十六進(jìn)制最大值為F
0o88 // 報(bào)錯(cuò)秘豹,八進(jìn)制最大值為7
0b22 // 報(bào)錯(cuò)携御,二進(jìn)制最大值為1

2 特殊值##

2.1 正零和負(fù)零##

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

幾乎所有場合,正零和負(fù)零都會(huì)被當(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

2.2 NaN##

NaN是JavaScript的 特殊值,表示“非數(shù)字”(Not a Number)昵时,主要出現(xiàn)在將字符串解析成數(shù)字出錯(cuò)的場合

 5 - "x"; // 返回NaN
 //一些數(shù)學(xué)運(yùn)算
 Math.acos(2) // NaN
 Math.log(-1) // NaN
 Math.sqrt(-1) // NaN

 0 / 0 // NaN

(1) NaN不等于任何值捷雕,包括它本身!!!

NaN === NaN // false

(2)由于數(shù)組的indexOf方法,內(nèi)部使用的是嚴(yán)格相等運(yùn)算符债查,所以該方法對(duì)NaN不成立

[NaN].indexOf(NaN) // -1

(3)NaN在布爾運(yùn)算時(shí)被當(dāng)作false非区。

      Boolean(NaN) // false

(4)NaN與任何數(shù)(包括它自己)的運(yùn)算瓜挽,得到的都是NaN

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

isNaN方法可以用來判斷一個(gè)值是否為NaN盹廷。但是,isNaN只對(duì)數(shù)值有效久橙,如果傳入其他值俄占,會(huì)被先轉(zhuǎn)成數(shù)值。

isNaN('Hello') // true
// 相當(dāng)于
isNaN(Number('Hello')) // true

isNaN({}) // true
//相當(dāng)于
isNaN(Number({})) // true

isNaN(['xzy']) // true
// 等同于
isNaN(Number(['xzy'])) // true

但是淆衷,對(duì)于空數(shù)組和只有一個(gè)數(shù)值成員的數(shù)組缸榄,isNaN返回false。

isNaN([]) // false
isNaN([123]) // false
isNaN(['123']) // false

(5)NaN判斷方法

//NaN本身就是數(shù)字
function myIsNaN(value) { 
      return typeof value === 'number' && isNaN(value);
 }
//NaN不等于NaN
function myIsNaN(value) { 
  return value !== value;
}

2.3 Infinity##

(1)定義
Infinity表示“無窮”祝拯,用來表示兩種場景甚带。一種是一個(gè)正的數(shù)值太大,或一個(gè)負(fù)的數(shù)值太小佳头,無法表示鹰贵;另一種是非0數(shù)值除以0,得到Infinity康嘉。

// 場景一
Math.pow(2, Math.pow(2, 100))// Infinity

// 場景二
0 / 0 // NaN
1 / 0 // Infinity

Infinity有正負(fù)之分碉输,Infinity表示正的無窮,-Infinity表示負(fù)的無窮亭珍。

Infinity === -Infinity // false
1 / -0 // -Infinity
-1 / -0 // Infinity

Infinity大于一切數(shù)值(除了NaN)敷钾,-Infinity小于一切數(shù)值(除了NaN)。

Infinity > 1000 // true
-Infinity < -1000 // true
Infinity > Number.MAX_VALUE  //true
-Infinity < Number.MIN_VALUE  //true

Infinity與NaN比較肄梨,總是返回false阻荒。

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

(2)運(yùn)算規(guī)則
Infinity的四則運(yùn)算,符合無窮的數(shù)學(xué)計(jì)算規(guī)則众羡。

5 * Infinity // Infinity
5 - Infinity // -Infinity
//相當(dāng)于
5 + (-infinity) // -Infinity

Infinity / 5 // Infinity
5 / Infinity // 0
5%infinity  //5

0乘以Infinity侨赡,返回NaN;
0除以Infinity,返回0辆毡;
Infinity除以0菜秦,返回Infinity。

0 * Infinity // NaN
0 / Infinity // 0
Infinity / 0 // Infinity

Infinity與null計(jì)算時(shí)舶掖,null會(huì)轉(zhuǎn)成0球昨,等同于與0的計(jì)算。

null * Infinity // NaN
null / Infinity // 0
Infinity / null // Infinity

Infinity與undefined計(jì)算眨攘,返回的都是NaN主慰。

undefined + Infinity // NaN
undefined - Infinity // NaN
undefined * Infinity // NaN
undefined / Infinity // NaNInfinity / undefined // NaN

Infinity加上或乘以Infinity,返回的還是Infinity鲫售。

Infinity + Infinity // Infinity
Infinity * Infinity // Infinity

Infinity減去或除以Infinity共螺,得到NaN。

Infinity - Infinity // NaN
Infinity / Infinity // NaN

(3)isFinite函數(shù)
isFinite函數(shù)返回一個(gè)布爾值情竹,檢查某個(gè)值是不是正常數(shù)值藐不,而不是Infinity。

isFinite(Infinity) // false
isFinite(-1) // true
isFinite(true) // true
isFinite(NaN) // false

3. 與數(shù)值相關(guān)的全局方法#

3.1 parseInt##

3.1.1 規(guī)則
parseInt方法用于將字符串轉(zhuǎn)為整數(shù)秦效。
規(guī)則:

  1. 如果傳入的不是字符串雏蛮,則先轉(zhuǎn)字符串在轉(zhuǎn)整數(shù)
  2. 如果字符串的第一個(gè)字符不能轉(zhuǎn)化為數(shù)字(后面跟著數(shù)字的正負(fù)號(hào)除外),返回NaN
  3. parseInt的返回值只有兩種可能阱州,不是一個(gè)十進(jìn)制整數(shù)挑秉,就是NaN
parseInt(' 81') // 81

parseInt(1.23) // 1
// 等同于
parseInt('1.23') // 1

parseInt('8a') // 8
parseInt('12**') // 12
parseInt('12.34') // 12
parseInt('15e2') // 15
parseInt('15px') // 15

parseInt('abc') // NaN
parseInt('.3') // NaN
parseInt('') // NaN
parseInt('+') // NaN
parseInt('+1') // 1

//如果字符串以0x或0X開頭苔货,parseInt會(huì)將其按照十六進(jìn)制數(shù)解析犀概。parseInt('0x10') // 16

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

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

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

3.1.2 進(jìn)制轉(zhuǎn)換
(1)parseInt方法還可以接受第二個(gè)參數(shù)(2到36之間)姻灶,表示被解析的值的進(jìn)制,返回該值對(duì)應(yīng)的十進(jìn)制數(shù)

//默認(rèn)轉(zhuǎn)換為10進(jìn)制
parseInt('1000') // 1000
// 等同于
parseInt('1000', 10) // 1000

parseInt('1000', 2) // 8
parseInt('1000', 6) // 216
parseInt('1000', 8) // 512

(2)如果第二個(gè)參數(shù)不是數(shù)值滥嘴,會(huì)被自動(dòng)轉(zhuǎn)為一個(gè)整數(shù)木蹬。這個(gè)整數(shù)只有在2到36之間,才能得到有意義的結(jié)果若皱,超出這個(gè)范圍镊叁,則返回NaN。如果第二個(gè)參數(shù)是0走触、undefined和null晦譬,則直接忽略。

parseInt('10', 37) // NaN
parseInt('10', 1) // NaN
parseInt('10', 0) // 10

parseInt('10', null) // 10
parseInt('10', undefined) // 10

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

parseInt('1546', 2) // 1
parseInt('546', 2) // NaN
//對(duì)于二進(jìn)制來說尤莺,1是有意義的字符,5生棍、4颤霎、6都是無意義的字符,所以第一行返回1涂滴,第二行返回NaN

(4)如果parseInt的第一個(gè)參數(shù)不是字符串友酱,會(huì)被先轉(zhuǎn)為字符串。這會(huì)導(dǎo)致一些令人意外的結(jié)果柔纵。

parseInt(011, 2) // NaN
// 等同于
parseInt(String(011), 2)
//八進(jìn)制011等于10進(jìn)制9缔杉, 字符串9轉(zhuǎn)換為二進(jìn)制時(shí),返回NaN

parseInt('011', 2) // 3
//字符串轉(zhuǎn)二進(jìn)制

3.2 parseFloat##

3.2.1 基本
(1) 用于將一個(gè)字符串轉(zhuǎn)為浮點(diǎn)數(shù)搁料。

parseFloat('3.14') // 3.14
parseFloat('314e-2') // 3.14
parseFloat('0.0314E+2') // 3.14

(2)如果字符串包含不能轉(zhuǎn)為浮點(diǎn)數(shù)的字符或详,則不再進(jìn)行往后轉(zhuǎn)換,返回已經(jīng)轉(zhuǎn)好的部分加缘。

parseFloat('3.14more non-digit characters') // 3.14

(3)parseFloat方法會(huì)自動(dòng)過濾字符串前導(dǎo)的空格鸭叙。

parseFloat('\t\v\r12.34\n ') // 12.34

(4)如果參數(shù)不是字符串觉啊,或者字符串的第一個(gè)字符不能轉(zhuǎn)化為浮點(diǎn)數(shù)拣宏,則返回NaN。

parseFloat([]) // NaN
parseFloat('FF2') // NaN
parseFloat('') // NaN

(5)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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末杠人,一起剝皮案震驚了整個(gè)濱河市勋乾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嗡善,老刑警劉巖辑莫,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異罩引,居然都是意外死亡各吨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門袁铐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來揭蜒,“玉大人,你說我怎么就攤上這事剔桨√敫” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵洒缀,是天一觀的道長瑰谜。 經(jīng)常有香客問我欺冀,道長,這世上最難降的妖魔是什么萨脑? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任隐轩,我火速辦了婚禮,結(jié)果婚禮上渤早,老公的妹妹穿的比我還像新娘龙助。我一直安慰自己,他們只是感情好蛛芥,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布提鸟。 她就那樣靜靜地躺著,像睡著了一般仅淑。 火紅的嫁衣襯著肌膚如雪称勋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天涯竟,我揣著相機(jī)與錄音赡鲜,去河邊找鬼。 笑死庐船,一個(gè)胖子當(dāng)著我的面吹牛银酬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播筐钟,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼揩瞪,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了篓冲?” 一聲冷哼從身側(cè)響起李破,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎壹将,沒想到半個(gè)月后嗤攻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡诽俯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年妇菱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暴区。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡闯团,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出颜启,到底是詐尸還是另有隱情偷俭,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布缰盏,位于F島的核電站涌萤,受9級(jí)特大地震影響淹遵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜负溪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一透揣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧川抡,春花似錦辐真、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至密幔,卻和暖如春楔脯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背胯甩。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來泰國打工昧廷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人偎箫。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓木柬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親淹办。 傳聞我的和親對(duì)象是個(gè)殘疾皇子眉枕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 什么是 JavaScript 語言? JavaScript 是一種輕量級(jí)的腳本語言娇唯。所謂“腳本語言”(script...
    oWSQo閱讀 1,790評(píng)論 0 1
  • 最近開始學(xué)習(xí)的JS齐遵,做這個(gè)筆記只是為了記錄一下自己的學(xué)習(xí)情況,也算是督促自己每天多看點(diǎn)書塔插。基本都是書上的內(nèi)容整理了...
    丨ouo丨閱讀 288評(píng)論 2 1
  • 本章內(nèi)容 語法 數(shù)據(jù)類型 流控制語句 理解函數(shù) 3.1 語法 3.1.1 區(qū)分大小寫 區(qū)分大小寫 3.1.2 標(biāo)識(shí)...
    悶油瓶小張閱讀 717評(píng)論 0 0
  • 有人說過拓哟,很多彎路到最后都成了直路想许,所有的坑到最后也都成了坦途;所謂的直路和坦途并不是擺在眼前的断序,都是不斷的的...
    老衲法號(hào)一眉道人閱讀 1,331評(píng)論 0 4
  • 一場考試 散了一班人 三年的回憶 化為烏有 曾經(jīng)可笑的誓言 也已不復(fù)存在 過去總是伴隨著后悔 希望你在感嘆時(shí)能夠微...
    炎月葬魂閱讀 208評(píng)論 0 1