一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

ES6 - 基礎(chǔ)學(xué)習(xí)(6): 數(shù)值擴(kuò)展

 Coder編程 2020-08-05

二進(jìn)制和八進(jìn)制數(shù)值表示法

ES6提供了二進(jìn)制和八進(jìn)制數(shù)值的新寫法,分別前綴 0b(或0B)、 0o(或0O)然后跟上二進(jìn)制、八進(jìn)制值即可。

  二進(jìn)制(Binary)表示法新寫法:前綴 0b 或 0B。

  let binary = 0b010101;        // 21
  let binary2 = 0B010111;       // 23

  八進(jìn)制(Octal)表示法新寫法:前綴 0o 或 0O。

  let octal = 0o123;        // 83
  let octal2 = 0O1234;         // 668

  從ES5開始,嚴(yán)格模式下,八進(jìn)制數(shù)值就不再允許用前綴0表示,ES6則進(jìn)一步明確規(guī)定,八進(jìn)制數(shù)值用0o前綴表示。

  // 非嚴(yán)格模式
  (function () {
      console.log(0o01 === 001);
  })();
  // true

  // 嚴(yán)格模式
  (function () {
      'use strict';
      console.log(0o01 === 001);    // Octal literals with prefix '0' are not allowed. Use '0o' prefix instead
  })();
  // Uncaught SyntaxError: Octal literals are not allowed in strict mode.

數(shù)值的驗(yàn)證、判斷、以及轉(zhuǎn)換

  ES6不僅提供了很多新的數(shù)值處理方法,同時(shí)還將之前相對(duì)零散的全局處理方法都整理到了Number對(duì)象里面。 

  數(shù)值的驗(yàn)證:Number.isFinite()【用于檢查一個(gè)數(shù)值是否為有限的( finite),即不是 Infinity】,Number.isNaN()【用于檢查一個(gè)值是否為NaN】

  數(shù)值的判斷:Number.isInteger()【用于判斷一個(gè)數(shù)值是否為整數(shù)】,Number.isSafeInteger()【用于判斷整數(shù)是否在安全整數(shù)范圍內(nèi)】

  數(shù)值的轉(zhuǎn)換:Number.parseInt(),Number.parseFloat()

 數(shù)值的驗(yàn)證:ES6在Number對(duì)象內(nèi),新提供了 Number.isFinite()和 Number.isNaN()兩個(gè)方法。

  1、Number.isFinite():用于檢查一個(gè)數(shù)值是否為有限的(finite),即不是Infinity。同時(shí)Number.isFinite() 沒有進(jìn)行隱式的 Number() 類型轉(zhuǎn)換,所有非數(shù)值都返回 false。所以Number.isFinite()還可以用來進(jìn)行數(shù)字驗(yàn)證,只要是數(shù)值,不論是整形還是浮點(diǎn)型都會(huì)返回 true,非數(shù)值則一律返回 false。

  console.log(Number.isFinite('testDemo'));        // false 字符串
  console.log(Number.isFinite(1992));              // true  整形數(shù)值
  console.log(Number.isFinite(0.5));               // true  浮點(diǎn)型
  console.log(Number.isFinite(true));              // false 布爾值
  console.log(Number.isFinite(null));              // false null
  console.log(Number.isFinite(undefined));         // false undefined
  console.log(Number.isFinite([1, 2, 3]));         // false 數(shù)組
  console.log(Number.isFinite({test: 'Demo'}));    // false 對(duì)象
  console.log(Number.isFinite(NaN));               // false NaN
  console.log(Number.isFinite(Infinity));          // false Infinity
  console.log(Number.isFinite(-Infinity));         // false -Infinity

  2、Number.isNaN():用于檢查一個(gè)值是否為NaN。參數(shù)類型不是NaN,Number.isNaN() 則一律返回 false,而且 Number.isNaN() 也沒有進(jìn)行隱式的 Number() 類型轉(zhuǎn)換。

  console.log(Number.isNaN('testDemo'));           // false
  console.log(Number.isNaN('testDemo'/0));         // true
  console.log(Number.isNaN('true'/'true'));        // true
  console.log(Number.isNaN(1992));                 // false
  console.log(Number.isNaN(1992/0));               // false
  console.log(Number.isNaN(0.5));                  // false
  console.log(Number.isNaN(true));                 // false
  console.log(Number.isNaN(true/0));               // false
  console.log(Number.isNaN(null));                 // false
  console.log(Number.isNaN(undefined));            // false
  console.log(Number.isNaN([1, 2, 3]));            // false
  console.log(Number.isNaN({test: 'Demo'}));       // false
  console.log(Number.isNaN(NaN));                  // true
  console.log(Number.isNaN(1992/NaN));             // true
  console.log(Number.isNaN(Infinity));             // false
  console.log(Number.isNaN(-Infinity));            // false

數(shù)值的判斷:Number.isInteger()【用于判斷一個(gè)數(shù)值是否為整數(shù)】,Number.isSafeInteger()【用于判斷數(shù)值是否在安全范圍內(nèi)】

  1、Number.isInteger():用于判斷一個(gè)數(shù)值是否為整數(shù)。如果參數(shù)不是數(shù)值,Number.isInteger()則返回false。

  console.log(Number.isInteger(0));                     // true
  // JavaScript內(nèi)部,整數(shù)和浮點(diǎn)數(shù)采用同樣的儲(chǔ)存方法,因此 1 與 1.0 被視為相同的值
  console.log(Number.isInteger(1));                     // true
  console.log(Number.isInteger(1.0));                   // true

  console.log(Number.isInteger(1.1));                   // false
  console.log(Number.isInteger(Math.PI));               // false
  // NaN 和正負(fù) Infinity 都不是整數(shù)
  console.log(Number.isInteger(NaN));                   // false
  console.log(Number.isInteger(Infinity));              // false
  console.log(Number.isInteger(-Infinity));             // false

  console.log(Number.isInteger("1992"));                // false
  console.log(Number.isInteger(true));                  // false
  console.log(Number.isInteger(false));                 // false
  console.log(Number.isInteger(null));                  // false
  console.log(Number.isInteger(undefined));             // false
  console.log(Number.isInteger([1,2,3]));               // false
  console.log(Number.isInteger({test: 'Demo'}));        // false

  // 數(shù)值的精度超過53個(gè)二進(jìn)制位(1個(gè)隱藏位,52個(gè)有效位)時(shí),由于第54位及后面的位被丟棄,JS會(huì)產(chǎn)生誤判,此時(shí)就相當(dāng)于在判定1.000000000000000,所以會(huì)返回true。
  console.log(Number.isInteger(1.0000000000000001));    // true  
  // 同理,當(dāng)一個(gè)數(shù)值的絕對(duì)值小于Number.MIN_VALUE(5E-324),即小于JavaScript能夠分辨的最小值,會(huì)被自動(dòng)轉(zhuǎn)為0,此時(shí)JS也會(huì)產(chǎn)生誤判。
  console.log(Number.isInteger(5E-324));                // false  5E-324 還沒超出最小值范圍,所以isInteger()判定還是false。
  console.log(Number.isInteger(5E-325));                // true   5E-325 由于值太小,超出JS能夠分辨的最小值范圍,所以被自動(dòng)轉(zhuǎn)為0,因此isInteger()判定為true。

  總之,如果對(duì)數(shù)據(jù)的精度要求較高,在進(jìn)行數(shù)據(jù)是否為整數(shù)進(jìn)行判定時(shí),不建議使用Number.isInteger()方法。 

  2、Number.isSafeInteger()用于判定整數(shù)是否在安全整數(shù)范圍內(nèi)

數(shù)值的轉(zhuǎn)換:Number.parseInt(),Number.parseFloat()。ES6將之前的全局方法 parseInt() 和 parseFloat() 移植到了Number對(duì)象內(nèi),行為和之前的全局方法一樣。這樣將之前的全局方法逐步移植到各個(gè)模塊內(nèi),既減少了全局性方法數(shù)量,又使得方法逐步模塊化,聚合化。

  1、Number.parseInt():用于解析一個(gè)字符串,并返回一個(gè)整數(shù)。

  2、Number.parseFloat():用于解析一個(gè)字符串,并返回一個(gè)浮點(diǎn)數(shù)。

  // 不指定轉(zhuǎn)換進(jìn)制時(shí),默認(rèn)為 10 進(jìn)制
  // parseInt() 和 Number.parseInt()
  // ES5寫法
  parseInt('1992.102');                    // 1992
  parseInt(1992.102);                      // 1992
  // ES6新寫法
  Number.parseInt('1992.1020');            // 1992
  Number.parseInt(1992.1020);              // 1992

  // 指定轉(zhuǎn)換進(jìn)制時(shí),第二個(gè)參數(shù)指定的基數(shù)(基數(shù)可以是10[默認(rèn)基數(shù),可以不寫], 2, 8或 16等進(jìn)制數(shù)),將字符串參數(shù)解析為有符號(hào)的整數(shù)。
  Number.parseInt('0101',2);               // 5
  Number.parseInt('111',8);                // 73
  Number.parseInt('222',16);               // 546
  Number.parseInt('-333',10);              // -333

  // parseFloat() 和 Number.parseFloat()。兩方法都是先判定指定字符串或數(shù)字串中的首個(gè)字符是否是數(shù)字。是,則對(duì)該字符串進(jìn)行解析,直到數(shù)字的末端為止,然后以數(shù)字格式返回該數(shù)字。
  // 注:字符串中只返回第一個(gè)數(shù)字、字符串開頭結(jié)尾允許存在空格,但中間如出現(xiàn)空格,則空格后面的數(shù)字將不予識(shí)別。
  // ES5寫法
  parseFloat('1992.1020abc');              // 1992.102
  parseFloat(1992.1020);                   // 1992.102
  parseFloat(' 199 2.1020abc ');           // 199
  // ES6新寫法
  Number.parseFloat('1992.1020abc');       // 1992.102
  Number.parseFloat(1992.1020);            // 1992.102
  Number.parseFloat(' 1992.1 020abc ');    // 1992.1

  // 當(dāng)首個(gè)字符無法被解析成整數(shù)和浮點(diǎn)數(shù)時(shí)(若首個(gè)字符被解析為正負(fù)號(hào)時(shí),則判定第二個(gè)字符的解析結(jié)果),則都返回 NaN
  Number.parseInt('abc');                  // NaN
  Number.parseFloat('abc');                // NaN

  // Number.parseInt()與全局的 parseInt() 方法是同一個(gè)方法
  Number.parseInt === parseInt;            // true
  // Number.parseFloat()與全局的 parseFloat() 方法也是同一個(gè)方法
  Number.parseFloat === parseFloat;        // true

最大/最小安全數(shù) 以及Number.isSafeInteger()

  安全整數(shù)及安全整數(shù)范圍:安全整數(shù)是 JavaScript 中能夠精確表示的整數(shù),其范圍在 2 的 -53 次方到 2 的 53 次方之間(不包括兩個(gè)端點(diǎn),既(-Math.pow(2, 53),Math.pow(2, 53))),超過這個(gè)范圍(不論是整數(shù)還是小數(shù))JavaScript 都無法精確表示該數(shù)了。

  安全數(shù)范圍:大小在 2 的 -53 次方到 2 的 53 次方之間(不包括兩個(gè)端點(diǎn),既(-Math.pow(2, 53),Math.pow(2, 53)))的數(shù)。

  最大安全整數(shù):安全整數(shù)的上限,即 2 的 53 次方減 1 ?! ath.pow(2, 53)-1;  // 9007199254740992-1

  最小安全整數(shù):安全整數(shù)的下限,即 2 的 53 次方減 1 的負(fù)數(shù)?! ?(Math.pow(2, 53)-1);  // -(9007199254740992-1)

  常量:ES6 引入了 Number.MAX_SAFE_INTEGER 和 Number.MIN_SAFE_INTEGER 兩個(gè)常量,用來表示安全整數(shù)的上下限。以便于日常開發(fā)過程中 判定數(shù)值是否超出安全范圍。

  Math.pow(2, 53);                                   // 9007199254740992
  Math.pow(2, 53)-1;                                  // 9007199254740991
  -(Math.pow(2, 53)-1);                              // -9007199254740991
  
  Math.pow(2, 53) === Math.pow(2, 53) + 0.01;         // true,超出 2 的 53 次方之后,JS就無法精確表示這個(gè)值了,哪怕多0.01都不行。
  -Math.pow(2, 53) === (-Math.pow(2, 53))-0.01;       // true

  console.log(Number.MAX_SAFE_INTEGER);              // 9007199254740991
  console.log(Number.MIN_SAFE_INTEGER);              // -9007199254740991

  console.log(Number.MAX_SAFE_INTEGER === Math.pow(2, 53) - 1);            // true
  console.log(Number.MIN_SAFE_INTEGER === -(Math.pow(2, 53) - 1));         // true

  Number.isSafeInteger():用于判定整數(shù)是否在安全整數(shù)范圍內(nèi)。

  // Number.isSafeInteger()用于判定整數(shù)是否在安全整數(shù)范圍內(nèi)
  Number.isSafeInteger(Number.MAX_SAFE_INTEGER);         // true
  Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1);     // false
  Number.isSafeInteger(Number.MIN_SAFE_INTEGER);         // true
  Number.isSafeInteger(Number.MIN_SAFE_INTEGER - 1);     // false
  Number.isSafeInteger(1992);                            // true

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    中文久久乱码一区二区| 嫩呦国产一区二区三区av| 欧美中文字幕日韩精品| 日韩成人免费性生活视频| 欧美日韩无卡一区二区| 久久亚洲成熟女人毛片| 免费在线成人激情视频| 中文字幕一区二区三区大片| 99免费人成看国产片| 国产精品香蕉免费手机视频| 五月婷婷综合激情啪啪| 国产成人午夜av一区二区 | 日韩夫妻午夜性生活视频| 成人你懂的在线免费视频| 色综合伊人天天综合网中文| 91精品日本在线视频| 98精品永久免费视频| 欧美日韩国产另类一区二区| 午夜国产精品国自产拍av| 风韵人妻丰满熟妇老熟女av| 最近最新中文字幕免费| 久久99这里只精品热在线| 爽到高潮嗷嗷叫之在现观看| 欧美国产日韩变态另类在线看| 欧美日韩精品久久亚洲区熟妇人| 欧美精品亚洲精品日韩专区| 亚洲国产成人久久99精品| 国产性情片一区二区三区| 久久亚洲午夜精品毛片| 玩弄人妻少妇一区二区桃花| 国产日韩中文视频一区| 一区二区免费视频中文乱码国产| 女人高潮被爽到呻吟在线观看| 日韩国产亚洲欧美激情| 丰满人妻一二区二区三区av| 免费亚洲黄色在线观看| 日韩一级免费中文字幕视频| 欧美整片精品日韩综合| 亚洲高清一区二区高清| 日韩人妻少妇一区二区| 成人国产激情福利久久|