成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

ES6精華:數(shù)值擴(kuò)展

newtrek / 2951人閱讀

摘要:基礎(chǔ)極值采用標(biāo)準(zhǔn)的位雙精度格式存儲(chǔ)數(shù)值。如果數(shù)值的精度超過(guò)此限度,第位及后面的會(huì)被丟棄。數(shù)值的極值分為兩種可表示的極值和可精確計(jì)算的極值浮點(diǎn)型不算。超過(guò)精度的數(shù)值可正確顯示,但由其計(jì)算得出的結(jié)果可能不準(zhǔn)確。整型數(shù)值安全區(qū)間。

ES6為數(shù)值增加了些常量和方法,使計(jì)算更為簡(jiǎn)便安全。本篇概括了這中的精華知識(shí)。

1 基礎(chǔ) 1.1 極值

JS采用IEEE 754標(biāo)準(zhǔn)的64位雙精度格式存儲(chǔ)數(shù)值。
數(shù)值的精度最多可達(dá)到53個(gè)二進(jìn)制位(1個(gè)隱藏位和52個(gè)有效位)。
如果數(shù)值的精度超過(guò)此限度,第54位及后面的會(huì)被丟棄。

數(shù)值的極值分為兩種:可表示的極值和可精確計(jì)算的極值(浮點(diǎn)型不算)。
可表示的極值:[5e-324, 1.7976931348623157e+308]。
可精確計(jì)算的極值:[1 - Math.pow(2, 53), Math.pow(2, 53) - 1]

超過(guò)精度的數(shù)值可正確顯示,但由其計(jì)算得出的結(jié)果可能不準(zhǔn)確。

let num = 9007199254741002;
console.log( num ); // 9007199254741002
console.log( num + 1 ); // 9007199254741004
console.log( num + 3 ); // 9007199254741004

let n1 = Math.pow(2, 53) - 1 + 1 + 1;
let n2 = Math.pow(2, 53) - 1 + 1 + 2;
console.log(n1 === n2); // true

對(duì)于整數(shù),最多能精確顯示16個(gè)十進(jìn)制位,超過(guò)會(huì)被截?cái)唷?
對(duì)于小數(shù),最多能精確顯示小數(shù)點(diǎn)后16個(gè)十進(jìn)制位,超過(guò)會(huì)被截?cái)唷?/p>

超過(guò)的位數(shù)會(huì)被截?cái)唷?
console.log( 3.000000000000001 === 3 ); // false
console.log( 3.0000000000000001 === 3 ); // true
console.log( 0.123456789123456891 ); // 0.1234567891234569
1.2 進(jìn)制

二進(jìn)制:0b1000B。
八進(jìn)制:0o1000O0100。
十六進(jìn)制:0x1000X100。
注意,可忽略0100格式表八進(jìn)制,因?yàn)閲?yán)格模式下不允許使用。

進(jìn)制間的轉(zhuǎn)化
使用進(jìn)制的完整格式,通過(guò)toString在不同進(jìn)制間轉(zhuǎn)化。

console.log( (10).toString(2) ); // 1010
console.log( (0b100).toString(8) ); // 4
console.log( ("0o100").toString(16) ); // 40

使用進(jìn)制的值,通過(guò)parseInt將其它進(jìn)制轉(zhuǎn)換成十進(jìn)制。

console.log( parseInt(100, 2) ); // 4
console.log( parseInt(100, 8) ); // 64
console.log( parseInt("100", 16) ); // 256

使用進(jìn)制的完整格式,通過(guò)Number將其它進(jìn)制轉(zhuǎn)化成十進(jìn)制。

console.log( Number(0b100) ); // 4
console.log( Number("0o100") ); // 64
console.log( Number("0x100") ); // 256
2 Number

完整的API列表:地址。
此模塊的方法,不會(huì)默認(rèn)轉(zhuǎn)化期待為數(shù)值類(lèi)型而實(shí)際不是的參數(shù)。

2.1 模塊化

將全局方法isFinite() & isNaN(),放到了Number模塊下。
兩者唯一的差別是,全局中的方法會(huì)默認(rèn)轉(zhuǎn)化非數(shù)值參數(shù),Number模塊下的不會(huì)。

console.log( isNaN("NaN") ); // true
- 等價(jià)于
console.log( isNaN(Number("NaN")) );

只要不是 NaN ,則為 false 。更為嚴(yán)格嚴(yán)謹(jǐn)。
console.log( Number.isNaN("NaN") ); // false
2.2 整數(shù)

增加了一些常量和方法為安全計(jì)算服務(wù)。

isInteger()
判斷一個(gè)數(shù)值是否為整數(shù)。非數(shù)直接為false
在JS中,整數(shù)和浮點(diǎn)數(shù)的儲(chǔ)存方式是相同的,所以2525.0被視為同一個(gè)值。

console.log( Number.isInteger("25") ); // false
console.log( Number.isInteger(25.0) ); // true
console.log( Number.isInteger(3.0000000000000002) ); // true

isSafeInteger()
判斷整型數(shù)值是否處于安全區(qū)間內(nèi)。非整型即為false
整型數(shù)值安全區(qū)間:[Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER]。
判斷一個(gè)算式及其結(jié)果是否安全,需要驗(yàn)證它的各個(gè)項(xiàng)以及結(jié)果。

isTrusty(9007199254740993, 990, 9007199254740993 - 990); // 報(bào)錯(cuò)

function isTrusty(left, right, result) {
  if (Number.isSafeInteger(left)
    && Number.isSafeInteger(right)
    && Number.isSafeInteger(result)) {
    return result;
  }
  throw new RangeError("Operation cannot be trusted!");
}
2.3 誤差

JS能識(shí)別的最小精度為Number.EPSILON,即Math.pow(2, -52)。
如果誤差小于此精度,就可以認(rèn)為這點(diǎn)誤差已經(jīng)沒(méi)有意義,即不存在誤差了。
在實(shí)際項(xiàng)目中,可以設(shè)置計(jì)算的容錯(cuò)誤差,以對(duì)比兩個(gè)浮點(diǎn)數(shù)應(yīng)不應(yīng)該相同等等。

console.log( 0.1 + 0.2 ); // 0.30000000000000004
console.log( (0.1 + 0.2) === 0.3 ); // false
console.log( isEqualInErrorRange(0.1 + 0.2, 0.3) ); // true

function isEqualInErrorRange(left, right) {
  return Math.abs(left - right) < Number.EPSILON;
}

設(shè)定需要精確的位數(shù),將浮點(diǎn)型轉(zhuǎn)化成整型,來(lái)較為安全的計(jì)算浮點(diǎn)數(shù)。

console.log( countFloat(0.1, 0.2, "+", 14) ); // 0.3

function countFloat(a, b, sign, num) {
  let res;
  let times = Math.pow(10, num);
  let _a = Math.floor(a * times);
  let _b = Math.floor(b * times);
  
  switch (sign) {
    case "-":
      res = isTrusty(_a, _b, _a - _b);
      break;
    case "+":
      res = isTrusty(_a, _b, _a + _b);
      break;
    case "/":
      res = isTrusty(_a, _b, _a / _b);
      break;
    case "*":
      res = isTrusty(_a, _b, _a * _b);
      break;
  }
  
  return res / times;
}
3 Math

完整的API列表:地址。
此模塊的方法,會(huì)默認(rèn)調(diào)用Number()轉(zhuǎn)化,期待為數(shù)值類(lèi)型而實(shí)際不是的參數(shù)。
此模塊新增了些,可以自行實(shí)現(xiàn)的簡(jiǎn)易方法,直接查手冊(cè)會(huì)更有效,就不列舉了。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/95692.html

相關(guān)文章

  • ES6精華:正則擴(kuò)展

    摘要:本篇概括了中正則表達(dá)式新增部分的精華要點(diǎn)最好有的基礎(chǔ)。標(biāo)志使正則處于模式。關(guān)于的字符擴(kuò)展知識(shí),可查看這里。四字節(jié)字符處于模式下的正則,可以正確識(shí)別位四字節(jié)字符。 本篇概括了ES6中正則表達(dá)式新增部分的精華要點(diǎn)(最好有ES5的基礎(chǔ))。 1 u 標(biāo)志 使正則處于Unicode模式。 關(guān)于ES6的字符擴(kuò)展知識(shí),可查看這里。 1.1 四字節(jié)字符 處于Unicode模式下的正則,可以正確識(shí)別3...

    paulli3 評(píng)論0 收藏0
  • ES6精華:字符串擴(kuò)展

    摘要:四字節(jié)字符大幅增強(qiáng)了對(duì)字節(jié)位字符的支持。內(nèi)部使用編碼規(guī)則網(wǎng)頁(yè)通常為。字符固定為字節(jié),字節(jié)為位二進(jìn)制,其碼點(diǎn)小于。有些符號(hào)的碼點(diǎn)大于,需字節(jié)表示,即常說(shuō)的位字符。表示方法新增一種表示字符的方法。用將碼點(diǎn)括起,使其可直接表示超過(guò)的值。 1 四字節(jié)字符 ES6大幅增強(qiáng)了對(duì)4字節(jié)(32位)字符的支持。 JS內(nèi)部使用UTF-16編碼規(guī)則(網(wǎng)頁(yè)通常為UTF-8)。 1字符固定為2字節(jié),1字節(jié)為...

    Jiavan 評(píng)論0 收藏0
  • Set & Map:新生的數(shù)據(jù)集合及其弱引用衍生

    摘要:前言新增了兩種基本的原生數(shù)據(jù)集合和加上和現(xiàn)在共有四種,以及由兩者衍生出的弱引用集合和。其本身是生成實(shí)例數(shù)據(jù)集合的構(gòu)造函數(shù),可以接受一個(gè)數(shù)組或具有接口的數(shù)據(jù)結(jié)構(gòu)作為參數(shù)用來(lái)初始化。返回鍵值對(duì)的遍歷器對(duì)象,鍵值對(duì)為鍵名鍵值。 前言 ES6新增了兩種基本的原生數(shù)據(jù)集合:Set和Map(加上Array和Object現(xiàn)在共有四種),以及由兩者衍生出的弱引用集合:WeakSet和WeakMap。從...

    AprilJ 評(píng)論0 收藏0
  • ES6精華:函數(shù)擴(kuò)展

    摘要:在函數(shù)方面的擴(kuò)展比較豐富也很實(shí)用,本篇概括了這中的精華知識(shí)。所以無(wú)法成為構(gòu)造函數(shù),不能使用操作符。參數(shù)將擴(kuò)展運(yùn)算符作用于參數(shù),即為參數(shù)。聲明式,直接為函數(shù)名。通過(guò)構(gòu)造函數(shù)生成的,為。函數(shù)的屬性,在其描述對(duì)象的屬性上,為函數(shù)名。 ES6在函數(shù)方面的擴(kuò)展比較豐富也很實(shí)用,本篇概括了這中的精華知識(shí)。 1 箭頭函數(shù) 箭頭函數(shù)是ES6中定義函數(shù)的新形式。 新形式不僅簡(jiǎn)化了定義方式,更為函數(shù)本身...

    lansheng228 評(píng)論0 收藏0
  • 細(xì)說(shuō)JS數(shù)組

    摘要:數(shù)組元素的讀寫(xiě)使用訪問(wèn)數(shù)組元素時(shí),將索引轉(zhuǎn)換為字符串,然后將其作為屬性名一樣使用。第一個(gè)參數(shù)應(yīng)該在前只展開(kāi)一層數(shù)組元素不變,返回注意,只拼接第一層結(jié)構(gòu)。 此乃犀牛書(shū)(第七章 數(shù)組)讀書(shū)筆記,又結(jié)合了ES6中數(shù)組的擴(kuò)展部分做的知識(shí)梳理。精華部分就是手工繪制的兩張數(shù)組總結(jié)圖了。靈活運(yùn)用數(shù)組的各種方法是基本功,是基本功,是基本功,重要的事情說(shuō)三遍。好了,正文從下面開(kāi)始~ 數(shù)組的基本概念 什么...

    starsfun 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<