日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第七节:ES6为数值做了哪些扩展?

發布時間:2025/3/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第七节:ES6为数值做了哪些扩展? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????????上一節和大家學習了字符串的擴展,這一節輪到了數值,我們一起來學習數值的擴展。

????????這幾天公眾號都收到了很多同學問,什么時候出下一節,大家的期待和學習熱情如此高漲,前端君也不會怠慢,繼續更新。劇透一下,這一節并不會很燒腦,都是介紹類的知識講解,理解性的東西不多,初學者們也可以愉快地看完。

傳統的寫法

?

????????在介紹數值的擴展之前我們來看看舊的規范和使用方式,有對比才能看出不同之處。

????????在ES5中,我們存在幾個全局函數 isNaN函數,isFinite函數,parseInt函數,parseFloat函數等,對于這些全局函數的使用很簡單,就拿isNaN函數來舉例。

ES5中的寫法是:

? ?
? ?isNaN(2.5);? //結果:false
? ?window.isNaN(2.5);//結果:false

????????以上兩種寫法均可,isNaN是全局函數,本身就是屬于window對象下的一個方法,所以大部分人會使用第一種寫法。

????????但是在ES6的標準中,isNaN方法被移植到了Number對象上,也就是原本屬于全局對象window下的函數,現在屬于Number對象上了,同樣被處理的函數還有isFinite函數,parseInt函數,parseFloat函數。

被移植后的函數使用方式是這樣的:

? ?
? ?Number.isNaN(2.5); //結果:false

????????在使用之前必須指明它是Number對象下的函數,否則會被默認為window下的函數。

?

????????說了這么多,差點忘記了介紹isNaN函數本身的作用,以及它在ES6的規范下有什么不一樣的地方。

新特性:Number.isNaN函數

????????Number.isNaN函數:用于判斷傳入的是否是非數值,注意:是判斷非數值,而不是判斷數值,IsNaN的全稱是: is not a number。

????????使用方式上面已經演示過,但為了加深印象,再展示多一次:

? ?
? ?Number.isNaN(2.5); //結果:false

????????由于2.5是一個number類型的數值,所以返回false(再次注意:判斷是非數值,所以是false,表示2.5是一個數值類型的值)。

????????那么,移植到Number對象isNaN函數和原本是全局函數的isNaN函數,有不一樣的地方嗎,還是僅僅簡單地移植過來就完事了?

????????答案:有區別。

????????傳統的isNaN函數會把非數值的參數轉化成數值再進行判斷,而Number. isNaN只對數值類型有效,非數值類型的參數一律返回false。看文字解釋不過癮,咱們看案例。

? ?
? ?isNaN('abc');//結果:true
? ?//'abc'無法轉為一個數值,返回true

? ?Number.isNaN('abc'); //結果:false
? ?//'abc'是字符串,Number.isNaN不做類型轉換,直接返回false

????????正如上面我寫的注釋一樣,Number下面的isNaN都懶得給字符串’abc’做類型轉換,直接返回false。而ES5中的isNaN函數會對字符串’abc’進行類型轉換后,發現它是一個NaN(非數值),才返回true。

????????所以我們在使用這個函數到時候還要小心,當返回false的時候,不一定就是一個數值,有可能是一個非數值類型的參數。

新特性:Number.isFinite函數??

????????Number.isFinite函數:用來檢查一個數值是否非無窮。注意是判斷非無窮,不是判斷無窮,這里跟isNaN函數一樣,有點繞。

? ?
? ?Number.isFinite(1);
? ?//結果:true,數值1是有窮,即非無窮

? ?Number.isFinite(Infinity);
? ?//結果:false,Infinity表示無窮大的特殊值

????

????????注意第二行代碼的參數:Infinity,Infinity是window對象下的一個常量,表示一個無窮數。所以第二行代碼會返回false。此外,isFinite函數跟isNaN函數一樣,也只是對數值類型有效,對非數值類型的參數一律返回false。

? ?
? ?Number.isFinite('abc'); //結果:false

????????所以同樣要注意,當Number.isFinite函數返回false的時候,參數不一定就是一個有窮的數值類型,也有可能是一個非數值類型的參數。如:字符串’abc’。

?

新特性:Number.parseInt函數??

????????parseInt函數:解析一個字符串,返回一個整數。parseInt函數同樣是從window對象下移植到Number對象下,但是它的作用沒有任何變化。

? ?
? ?//傳統用法:
? ?parseInt('12.3abc');?
? ?//結果:返回數值12

? ?//ES6用法:
? ?Number.parseInt('12.3abc');
? ?//結果:返回數值12

新特性:Number.parseFloat函數??

????????parseFloat函數:解析一個字符串,并返回一個浮點數。跟parseInt一樣,被移植到Number對象下,作用保持不變。

? ?
? ?//傳統用法:
? ?parseInt('12.3abc');
? ?//結果:返回數值12

? ?//ES6用法:
? ?Number.parseInt('12.3abc');
? ?//結果:返回數值12

?

????????以上4個函數都是在window對象下,移植到了Number對象下,你可以能會跟我一樣好奇:好端端地為什么好移植到其他地方去,這樣做的目的是什么?

????????其實這么做的目的是慢慢地減少全局性的函數,把全局函數合理地規劃到其他對象下,漸漸實現語言的模塊化。

?

????????講完了被移植的函數,咱們來學點新增的玩意。

新特性:Number.isInteger函數??

?

????????Number.isInteger函數:用來判斷是否是整數。

? ?
? ?Number.isInteger(3.2);
? ?//結果:false

? ?Number.isInteger(3);
? ?//結果:true

????????上面的運行結果也如我們所料,數值3.2不是整數,返回false。不過有一點要注意:在javascript內部對整數和浮點數采用一樣的存儲方式,因此小數點后如果都是0的浮點數,都會被認為是整數。看個例子就知道了:


? ?Number.isInteger(3.0);
? ?//結果:true

? ?Number.isInteger(3.00);
? ?//結果:true

????????

????????數值3.0和3.00都會被認為是整數。

極小常量

?

????????Number.EPSILON常量:定義一個極小的數值。

????????我們把這個數值打印出來看一下:


? ?console.log(Number.EPSILON);
? ?//結果:2.220446049250313e-16

????????2.220446049250313e-16是一個極小的數值,約等于0.00000000000000022204。干嘛要定義一個這樣的數值,在什么情況下會用它呢?

????????Number.EPSILON的出現是用來判斷浮點數的計算誤差,如果浮點數計算得到的誤差不超過Number.EPSILON的值,就表示可以接受這樣的誤差。

安全整數

????????ES6為我們引入了安全整數的概念。什么?整數還有安全和不安全的說法?原來JavaScript能夠準確表示的整數范圍在-2^53到2^53之間,超過這個范圍,無法精確表示這個值。故稱之為不安全。

????????為此,ES6定義了兩個常量來表示這個范圍的最大值和最小值:Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER。此外,如果給你一個數值,你不知道它是否超出了這個安全范圍,你可以使用ES6給我們新增的一個函數Number.isSafeInteger來進行判斷。看例子:


? ?Number.isSafeInteger(Number.MAX_SAFE_INTEGER);
? ?//結果:true

? ?Number.isSafeInteger(Number.MAX_SAFE_INTEGER+1);
? ?//結果:false

????????我們用最大安全整數Number.MAX_SAFE_INTEGER來做試驗,第一行代碼的結果返回的值是true,也就表示Number.MAX_SAFE_INTEGER屬于安全范圍,第二行代碼,我們對Number.MAX_SAFE_INTEGER進行了+1,相加后的數值超過安全范圍,isSafeInteger函數就返回了false,表示不在安全范圍內。

?

????????ES6給數值帶來的擴展,除了對Number對象進行了擴展,還對Math對象進行了擴展。對于Math對象大家應該不會感到陌生,我們平時用的求隨機數的方法random就是屬于Math對象下的方法。

????????有必要回顧一下:

? ?
? ?Math.random();
? ?//結果:隨機數0.8897368770341108

?

????????那么ES6給Math對象帶來哪些擴展呢?

????????ES6給Math對象新增了17個函數,我們挑選幾個常用的來講解一下。

新特性:Math.trunc函數

????????Math.trunc函數:用于去除一個數的小數部分,返回整數部分。


? ?Math.trunc(3);
? ?//結果:3

? ?Math.trunc(3.1);
? ?//結果:3

????????運行結果也很好理解,如果傳入的參數是整數,就直接返回整數,如果是小數,就去除了小數部分,返回整數部分:3。

新特性:Math.sign函數

?

????????Math.sign函數:用來判斷一個數到底是正數、負數、還是零。


? ?Math.sign(3);
? ?//結果:1

? ?Math.sign(-3);
? ?//結果:-1

? ?Math.sign(0);
? ?//結果:0

? ?Math.sign('abc');
? ?//結果:NaN

????????返回的結果類型有點多,我們分別來講解一下,參數如果是正數,結果返回1;如果是負數,結果返回-1;如果是0,結果返回0;如果是一個非數值類型的參數,結果返回:NaN。

新特性:Math.cbrt函數

????????Math.cbrt函數:用于計算一個數的立方根。


? ?Math.cbrt(8);
? ?//結果:2

? ?Math.cbrt(27);
? ?//結果:3

????

????????看以上代碼,2的立方是8,那么8作為參數,開立方根得到的值就是2,3的立方是27,那么27求立方根就得到了3,這就是Math.cbrt函數的作用。

????????除了這三個函數以外,剩下的新增函數都是一些高中時期的數學方法,只不過是ES6將他們的運算封裝成一個方法,方便大家使用,也算是開發者的福音。

它們分別是:

Math.acosh(x) 返回 x 的反雙曲余弦。

Math.asinh(x) 返回 x 的反雙曲正弦。

Math.atanh(x) 返回 x 的反雙曲正切。

Math.clz32(x) 返回 x 的 32 位二進制整數表示形式的前導 0 的個數。

Math.sinh(x) 返回x的雙曲正弦。

Math.cosh(x) 返回 x 的雙曲余弦。

Math.expm1(x) 返回 e?x - 1。

Math.fround(x) 返回 x 的單精度浮點數形式。

Math.hypot(...values) 返回所有參數的平方和的平方根。

Math.imul(x, y) 返回兩個參數以 32 位整數形式相乘的結果。

Math.log1p(x) 返回 1 + x 的自然對數。

Math.log10(x) 返回以 10 為底的x的對數。

Math.log2(x) 返回以 2 為底的 x 的對數。

Math.tanh(x) 返回 x 的雙曲正切。

????????這么多數學方法,估計很多人都會懵逼,根本記不住這么多,但是沒關系,我們也不需要去死記硬背它們,我們只需要記住ES6為Math對象擴展了很多數學方法就可以了。等真正使用到的時候,我們再去查找資料就可以了。

?

本節總結

總結:ES6對Number對象新增了isInteger函數、極小常量Number.EPSILON、安全整數;還將window對象下的4個函數移植到了Number對象下;此外,對Math對象擴展了17個新函數。

總結

以上是生活随笔為你收集整理的第七节:ES6为数值做了哪些扩展?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本va在线 | 国产真人做爰毛片视频直播 | 乱熟女高潮一区二区在线 | 伊人精品视频 | 麻豆传媒在线播放 | 免费黄色小视频 | 美女一区二区视频 | 美女又黄又免费 | avtt男人天堂 | 成人国产精品久久久网站 | av在线第一页 | r级无码视频在线观看 | 国产区福利 | 国产a网站 | yjizz国产| 美女插插| 波多野结衣中文在线 | 91天天爽| 久久免费看少妇高潮v片特黄 | wwww日本60| 亚洲一区二区三区免费在线观看 | 本道综合精品 | 国产一级片免费在线观看 | 啪啪免费小视频 | 欧美成年视频 | 无码国产69精品久久久久网站 | 久久一区二区三区四区五区 | 欧美精品一区二区三区久久久竹菊 | 91成人网页 | 亚洲天堂免费观看 | 深爱激情五月婷婷 | 久色视频在线播放 | 欧美特黄一级大片 | 日韩精品一区二区在线看 | 亚洲精品欧美在线 | 男操女视频在线观看 | 91视频三区 | 国产色综合天天综合网 | 亚洲天堂av免费在线观看 | 天堂а√在线中文在线 | 少妇媚药按摩中文字幕 | 哺乳期给上司喂奶hd | 四虎少妇做爰免费视频网站四 | 色播视频在线观看 | 国产成人精品免高潮费视频 | 国产微拍精品一区 | 日本不卡一区在线观看 | 国产精品夜夜爽张柏芝 | 粉嫩欧美一区二区三区 | 国产精品久久久久久久久久久久久久久久 | 性生交大片免费看l | 狠狠操综合| 久久久久国产一区二区 | 国产在线观看网站 | 久久午夜夜伦鲁鲁一区二区 | 视频精品久久 | 色综合久久久无码中文字幕波多 | 懂色av懂色av粉嫩av分享吧 | 国产精品久久免费视频 | 中文字幕第一页在线播放 | 国语对白做受按摩的注意事项 | 日本三级韩国三级美三级91 | 在线看的网站 | 91丨九色丨蝌蚪丨老版 | 一级片黄色 | 少妇被狂c下部羞羞漫画 | 丰满人妻综合一区二区三区 | 亚洲精品免费在线播放 | 特级毛片av| 国产 欧美 日本 | av播播| 欧洲美女av| 亚洲涩涩视频 | 激情婷婷综合网 | 色91在线 | 丝袜av在线播放 | 国产精品成人aaaa在线 | 超碰人人人人人人 | 超碰人人艹 | 国产精品成人网站 | 日本熟妇人妻中出 | 丁香啪啪综合成人亚洲 | 久久精品久久精品久久精品 | 91久久电影 | 日韩无| 岛国av一区二区 | 杨幂毛片午夜性生毛片 | 91亚洲国产成人精品性色 | 九九在线免费视频 | 精品一区在线看 | 高清国产视频 | 在线播放av网址 | 亚洲色图制服丝袜 | 国产欧美一区二区精品性色超碰 | 国内少妇精品 | 国语对白一区二区 | 欧美日韩亚洲一区二区三区 | 91成人短视频 | 国产精品一区二区三区免费在线观看 |