第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開(kāi)發(fā)者教程

ES6-10 入門(mén)教程

ES6+ 數(shù)值擴(kuò)展

1. 前言

ES6 對(duì)數(shù)值進(jìn)行了大的改版,在向下兼容的同時(shí),把所有的數(shù)值方法由全局移植到了 Number 對(duì)象下,在數(shù)組和字符串中也做了類(lèi)似的操作,這樣的主要目的是精簡(jiǎn)全局方法,更加明確的表達(dá)方法的含義。另外,ES6 還增加了二進(jìn)制和八進(jìn)制的表示方法,并增加了很多數(shù)值處理的方法,本節(jié)就來(lái)看看 ES6 對(duì)數(shù)值的擴(kuò)展。

2. Number 對(duì)象

JavaScript 的 Number 對(duì)象是經(jīng)過(guò)封裝的,能讓你處理數(shù)字值的對(duì)象, Number 對(duì)象由 Number() 構(gòu)造器創(chuàng)建。

2.1 類(lèi)型轉(zhuǎn)換

在非構(gòu)造器上下文中,也就是沒(méi)有 new 操作符時(shí),Number 可以類(lèi)型轉(zhuǎn)換的函數(shù)使用。 接收一個(gè)參數(shù),并將這個(gè)參數(shù)轉(zhuǎn)換為數(shù)字,如果參數(shù)無(wú)法被轉(zhuǎn)換為數(shù)字,則返回 NaN。

Number('10')			 	// 10
Number('imooc')		 	// NaN
Number('')					// 0
Number()						// 0
Number(undefined)		// NaN

上面的代碼中,在沒(méi)有字符串或者是空字符串的時(shí)候,會(huì)得到數(shù)字 0,還有參數(shù)是 null 時(shí)得到的結(jié)果也是 0。但是,當(dāng)參數(shù)為 undefined 時(shí)則會(huì)得到 NaN。

2.2 移植全局方法

在 ES5 中,如 parseFloat、parseInt 等都是全局方法,在 ES6 中把處理數(shù)值的一些方法都移植到了 Number 對(duì)象上了。

parseInt('123');				// 123
Number.parseInt('123');	// 123

上面的代碼可以看到,Number 對(duì)象下也有 parseInt 的方法,并且所有的數(shù)值方法在 Number 上也是一一對(duì)應(yīng)的,功能基本相同,有些方法還做了擴(kuò)展。在后面的小節(jié)中我們會(huì)對(duì) Number 上的方法和全局的方法進(jìn)行對(duì)比,看它們有什么不同,ES6 又解決了什么問(wèn)題。

3. 二進(jìn)制和八進(jìn)制表示法

ES6 提供了二進(jìn)制和八進(jìn)制數(shù)值表示的新寫(xiě)法,分別用前綴 0b(或 0B)和 0o(或 0O)表示。對(duì)應(yīng)的十六進(jìn)制我們知道用 0x 作為前綴來(lái)表示的。下面我們來(lái)看看二進(jìn)制和八進(jìn)制是怎么表示的。

// es6 2進(jìn)制 0B 開(kāi)頭
console.log('B',0B111110111); 	// 503
console.log('B',0b111110111); 	// 相同,0B 和 0b 都可以

// es6 8進(jìn)制 0o 開(kāi)頭
console.log(0o767); 	// 503
console.log(0O767); 	// 相同,0o 和 0O 都可以

上面的代碼分別使用了二進(jìn)制和八進(jìn)制對(duì)數(shù)字 503 進(jìn)行了表示,那下面我們來(lái)驗(yàn)證一下:

0b111110111 === 503 // true
0o767 === 503 		// true

上面的代碼中使用了全等的方式進(jìn)行判斷,很明顯,ES6 是支持這種方式的表示的。

從 ES5 開(kāi)始,在嚴(yán)格模式之中,八進(jìn)制就不再允許使用前綴 0 表示,ES6 進(jìn)一步明確,要使用前綴 0o 表示。

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

// 嚴(yán)格模式
(function(){
  'use strict';
  console.log(0o11 === 011);
})()
// Uncaught SyntaxError: Octal literals are not allowed in strict mode.

0b0o 前綴的字符串?dāng)?shù)值轉(zhuǎn)為十進(jìn)制,可以把 Number 對(duì)象直接作為方法使用。

Number('0b111')  // 7
Number('0o10')   // 8

4. Number 的屬性介紹

ES6 對(duì) Number 的屬性進(jìn)行了豐富,能夠適用更多的場(chǎng)景。

4.1 Number.EPSILON

ES6 在 Number 對(duì)象上面,新增一個(gè)極小的常量 Number.EPSILON。它表示 1 與大于 1 的最小浮點(diǎn)數(shù)之間的差。它是一個(gè)差值,屬于正數(shù)。

你不必創(chuàng)建一個(gè) Number 對(duì)象來(lái)訪問(wèn)這個(gè)靜態(tài)屬性(可以直接使用 Number.EPSILON)。

console.log(Number.EPSILON) // 2.220446049250313e-16

EPSILON 屬性的值接近于 2.2204460492503130808472633361816E-16,或者 2 的 -52 次方。

對(duì)于 64 位浮點(diǎn)數(shù)來(lái)說(shuō),大于 1 的最小浮點(diǎn)數(shù)相當(dāng)于二進(jìn)制的 1.00…001,小數(shù)點(diǎn)后面有連續(xù) 51 個(gè)零。這個(gè)值減去 1 之后,就等于 2 的 -52 次方。

0.1 + 0.2
// 0.30000000000000004

0.1 + 0.2 - 0.3
// 5.551115123125783e-17

5.551115123125783e-17.toFixed(20)
// '0.00000000000000005551'
上面代碼解釋了,為什么比較0.1 + 0.20.3得到的結(jié)果是false。

0.1 + 0.2 === 0.3 // false

Number.EPSILON 實(shí)際上是 JavaScript 能夠表示的最小精度。誤差如果小于這個(gè)值,就可以認(rèn)為已經(jīng)沒(méi)有意義了,即不存在誤差了。

引入一個(gè)這么小的量的目的,在于為浮點(diǎn)數(shù)計(jì)算,設(shè)置一個(gè)誤差范圍。我們知道浮點(diǎn)數(shù)計(jì)算是不精確的。

5.551115123125783e-17 < Number.EPSILON * Math.pow(2, 2)
// true

4.2 Number.MAX_SAFE_INTEGER

Number.MAX_SAFE_INTEGER 常量表示在 JavaScript 中最大的安全整數(shù)(maxinum safe integer)(2e53 - 1)。

console.log(Number.MAX_SAFE_INTEGER) 	// 9007199254740991

MAX_SAFE_INTEGER 是一個(gè)值為 9007199254740991 的常量。因?yàn)?Javascript 的數(shù)字存儲(chǔ)使用了 IEEE-754 中規(guī)定的雙精度浮點(diǎn)數(shù)數(shù)據(jù)類(lèi)型,而這一數(shù)據(jù)類(lèi)型能夠安全存儲(chǔ) -(2e53 - 1)2e53 - 1 之間的數(shù)值(包含邊界值)。

由于 MAX_SAFE_INTEGER 是 Number 的一個(gè)靜態(tài)屬性,所以你不用自己動(dòng)手為 Number 對(duì)象創(chuàng)建 Number.MAX_SAFE_INTEGER 這一屬性,就可以直接使用它。

4.3 Number.MIN_SAFE_INTEGER

Number.MIN_SAFE_INTEGER 代表在 JavaScript 中最小的安全的 integer 型數(shù)字 (-(253 - 1))。

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

MIN_SAFE_INTEGER 的值是 -9007199254740991. 形成這個(gè)數(shù)字的原因是 JavaScript 在 IEEE-754 中規(guī)定的。在這個(gè)規(guī)定中能安全地表示數(shù)字的范圍在 -(2e53 - 1)2e53 - 1之間

由于 MIN_SAFE_INTEGER 是 Number 的一個(gè)靜態(tài)屬性,你可以直接使用 Number.MIN_SAFE_INTEGER, 而不是自己去創(chuàng)建一個(gè) Number 的屬性。

5. 小結(jié)

本節(jié)主要講解了 ES6 對(duì)數(shù)值的擴(kuò)展主要總結(jié)一下幾點(diǎn):

  • 增加了二進(jìn)制和八進(jìn)制表示法;
  • 直接使用 Number 進(jìn)行類(lèi)型轉(zhuǎn)換;
  • 移植了原有的方法到 Number 對(duì)象上;
  • 對(duì)新增的 Number 對(duì)象上的屬性做了簡(jiǎn)單的解釋。

ES6 的 Number 對(duì)象還提供了很多方法,下面的小節(jié)會(huì)講到,還有 ES6 對(duì)數(shù)字的處理在 Math 小節(jié)做詳細(xì)的講解。