JS基本——數據類型之Number

這篇篇幅也許輕微有點長,內里涉及到4塊知識點:
1.NaN Number.isNaN window.isNaN
2.Number範例 以及特別值
3.Number範例轉換
4.parseInt parseFolat Number.parseInt Number.parseFolat

NaN
NaN是Number的一個特別值,它也是全局對象的一個屬性,es6里NaN是Number的一個靜態屬性,能夠用Number.NaN 接見。不要由於它的特別就疑心它的誕生,它然則地地道道的number範例

typeof NaN  "number"

那末NaN是怎樣發生的呢?
大多數狀況是舉行不正當操縱,比方0/0, 0/‘a’,NaN代表沒法示意的數值,由於多是由很多種狀況形成獲得NaN,所以NaN!==NaN(這裏之前一向明白不了)
舉個栗子🌰
《JS基本——數據類型之Number》

那末怎樣推斷一個數值是否是NaN呢?
js代碼中有用推斷一個數是否是NaN的要領:x != x, 假如x是NaN的話,返回就是true。實在我們另有要領幫我們推斷。這裡有兩個要領,一個是全局的isNaN(),另有一個es6內里增加的Number.isNaN()。那末他們真的一樣么,為何要反覆增加雷同的要領呢?

全局要領window.isNaN是推斷一個值轉為Number範例后,值是否是NaN,假如能轉換成NaN,就返回 true ,不然返回 false。然則沒法推斷值自身是否是NaN,所以ES6新增加了一個Number.isNaN,用來推斷值自身是否是NaN,該要領不會強迫將參數轉換成数字,只要在參數是真正的数字範例,且值為 NaN 的時刻才會返回 true
舉個栗子🌰
《JS基本——數據類型之Number》

例子中isNaN(‘123′)與Number.isNaN(‘123’)返回效果一樣,然則意義差別,前者示意轉為Number範例后值不是NaN,後者示意’123’自身是NaN么。isNaN(‘abc’)與Number.isNaN(‘abc’)返回效果不一樣,前者值自身不是NaN,後者示意‘abc’示意轉為Number範例后是NaN么

假如不支持Number.NaN,那末polyfill:

Number.isNaN = Number.isNaN || function(value) {
    return typeof value === "number" && isNaN(value);
}

或是:

Number.isNaN = Number.isNaN || function(value) {
    return typeof value === "number" && (value !== value);
}

參考資料:https://blog.csdn.net/joyfixi…
https://www.cnblogs.com/onepi…
https://developer.mozilla.org…
https://developer.mozilla.org…

Number

Number示意有4種字面範例:二進制(0b開首),八進制(0開首),十進制,十六進制(0x開首),假如八進制0后的数字大於8,那末就依據十進制處置懲罰。在舉行盤算的時刻,都會把其他的数字字面量示意,轉為十進制
《JS基本——數據類型之Number》

javascript會自動將數值轉為科學計數法示意
【1】小於1且小數點背面帶有5個0以上的浮點數值

0.0000003 // 3e-7
0.000003 // 0.000003

【2】整數位数字多於21位

1234567890123456789012 //1.2345678901234568e+21
1234567890123456789012.1 //1.2345678901234568e+21
123456789012345678901 //123456789012345680000

javascript供應了幾個特別數值,包含Number.MAX_VALUE、Number.MIN_VALUE、Number.POSITIVE_INFINITY、Number.NEGATIVE_INFINITY、Number.MAX_SAFE_INTEGER、Number.MIN_SAFE_INTEGER、Number.NaN、+0、-0共9個.个中,前7個特別數值是Number對象的屬性
舉個🌰
《JS基本——數據類型之Number》

Number範例轉換
Number作為函數挪用就是範例轉換,能夠把恣意範例的值轉為數值,
依據要轉換的參數數據範例這裏分為4類:数字,特別值,字符串,對象
1.自身是数字,那末轉成十進制的数字
《JS基本——數據類型之Number》

2.特別值
《JS基本——數據類型之Number》

3.字符串
《JS基本——數據類型之Number》

Number疏忽字符串中的空缺字符和空格,Number(‘123abc’)為NaN申明Number是把參數全部轉化,這個能夠跟背面的parseInt(), parseFloat()的區分

4.自身是對象的話,會依據以下步驟舉行:
A。挪用valueOf(),假如valueOf() 返回的照樣對象,那末進入B操縱,假如返回的是原始值了,那末跳過B操縱進入到C操縱
B。再挪用toString(),把對象轉為原始值
C。末了用Number操縱
《JS基本——數據類型之Number》《JS基本——數據類型之Number》

假如說Number是範例轉化的萬能选手,那末另有特地處置懲罰字符串轉化的專才:parseInt和parseFloat閃亮上台

parseInt()是特地針對字符串轉為整數數值,有以下的注意事項:

1.查找的步驟:
A.把傳入的第一個參數,先挪用toString(),變成字符串
B。過濾掉空格,找到第一個非空格字符,然後檢察這個字符能不能轉為數值或是負號,假如是,進入C操縱,假如不是,跳過直接到D操縱
C.假如能夠轉,那末再檢察第二個字符。住手查找有兩種狀況:找到字符串末了,另有就是遇到沒法轉為數值的字符
D。假如不能轉就返回NaN

2.科學計數法示意的字符串,轉為會有很奇異的題目,所以這時刻能夠用Math.floor()替換

3.es5沒法辨認八進制的數值
parseInt()能夠傳兩個參數,第二個參數是數值的進制,如許對轉為對應的十進制數值,這個整數只要在2到36之間,才獲得有意義的效果,超越這個局限,則返回NaN。假如第二個參數是0、undefined和null,則直接疏忽
《JS基本——數據類型之Number》

parseFloat()是特地處置懲罰字符串轉為浮點數,有以下的注意事項:
1.沒法辨認除十進制外的數值字面量範例
2.能夠示意示意出科學計數法
3.Number(”)的效果是0,parseInt(”)和parseFloat(”)的效果是NaN

es6里增加的Number.parseInt() Number.parseFloat() 跟全局的parseInt() parserFloat()的關聯是什麼呢?

Number.parseInt === parseInt

// 假如不支持Number.parseInt 
if (Number.parseInt === undefined)
 Number.parseInt = window.parseInt

參考資料:http://www.cnblogs.com/xiaohu…
https://developer.mozilla.org…
https://developer.mozilla.org…
http://javascript.ruanyifeng….

    原文作者:enggirl
    原文地址: https://segmentfault.com/a/1190000014750240
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞