国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

深入理解ES6之《改進(jìn)的數(shù)組功能》

Awbeci / 1025人閱讀

摘要:方法由于構(gòu)造函數(shù)創(chuàng)建數(shù)組時(shí)的怪異行為,比方說如下方法總會(huì)創(chuàng)建一個(gè)包含所有參數(shù)的數(shù)組方法不通過屬性確定返回值的類型,它使用當(dāng)前構(gòu)造函數(shù),也就是方法中的值來確定正確的返回?cái)?shù)據(jù)的類型方法以前總是使用將類數(shù)組轉(zhuǎn)換成數(shù)組方法可接受可迭代對(duì)象或類數(shù)組對(duì)

Array.of方法

由于Array構(gòu)造函數(shù)創(chuàng)建數(shù)組時(shí)的怪異行為,比方說如下:

let items = new Array(2)
console.log(items.length)//2
items = new Array("2")
console.log(items.length)//1

Array.of方法總會(huì)創(chuàng)建一個(gè)包含所有參數(shù)的數(shù)組

let items = Array.of(1, 2)
console.log(items.length)//2
console.log(items[0])//1

Array.of方法不通過Symbol.species屬性確定返回值的類型,它使用當(dāng)前構(gòu)造函數(shù),也就是of方法中的this值來確定正確的返回?cái)?shù)據(jù)的類型

Array.from方法

以前總是使用Array.prototype.slice.call(arrayLike)將類數(shù)組轉(zhuǎn)換成數(shù)組
Array.from方法可接受可迭代對(duì)象或類數(shù)組對(duì)象,最終返回一個(gè)數(shù)組
Array.from也是通過this來確定返回?cái)?shù)組的類型
Array.from接受第二個(gè)參數(shù),表示映射函數(shù),第三個(gè)參數(shù)表示映射函數(shù)中的this的值
來看幾個(gè)例子:

function translate() {
    return Array.from(arguments, (value) => value + 1)
}
let numbers = translate(1, 2, 3)
console.log(numbers) //2、3、4
let helper={
    diff:1,
    add(value){
        return value+this.diff
    }
}
function translate(){
    return Array.from(arguments,helper.add,helper)
}
let numbers = translate(1, 2, 3)
console.log(numbers) //2、3、4

看看用Array.from轉(zhuǎn)換可迭代對(duì)象

let numbers = {
    *[Symbol.iterator]() {
        yield 1;
        yield 2;
        yield 3;
    }
}
let numbers2 = Array.from(numbers, value => value + 1)
console.log(numbers2) //2、3、4
find方法和findIndex方法

find方法和findIndex方法都接受兩個(gè)參數(shù),一個(gè)是回調(diào)函數(shù),另外一個(gè)是可靠參數(shù)用于指定回調(diào)函數(shù)中this的值

let numbers = [25, 30, 35, 40, 45]
console.log(numbers.find(n => n > 35))//40
console.log(numbers.findIndex(n => n > 35))//3

如果要在數(shù)組中根據(jù)某個(gè)條件查找匹配的元素,那么find方法和findIndex方法可以很好的完成任務(wù),但是如果只想查找與某個(gè)值匹配的元素,則indexOf和lastIndexOf應(yīng)該是更好的選擇

fill方法

fill方法可以用指定的值填充一至多個(gè)數(shù)組元素,當(dāng)傳入一個(gè)值時(shí),fill方法會(huì)用這個(gè)值重寫數(shù)組中的所有值
fill方法的第二個(gè)參數(shù)表示開始索引,第三個(gè)參數(shù)作為不包含結(jié)束索引,如果沒有傳第三個(gè)參數(shù)則默認(rèn)使用numbers.length作為不包含結(jié)束索引
如果開始索引和結(jié)束索引為負(fù)值,那么這些值會(huì)與數(shù)組的length屬性相加為作為最終位置

copyWithin方法

調(diào)用copyWithin方法時(shí)需要傳入兩個(gè)參數(shù),一個(gè)是方法開始填充值的索引位置,另一個(gè)是開始復(fù)制值的索引位置,第三個(gè)參數(shù)為可選參數(shù),用來限制被重寫元素的數(shù)量,也就是指定停止復(fù)制值的位置

let numbers = [1, 2, 3, 4]
numbers.copyWithin(2, 0, 1)
console.log(numbers)//1,2,1,4

跟fill方法一樣,copyWithin方法的所有參數(shù)都接受負(fù)數(shù)值,并且會(huì)自動(dòng)與數(shù)組長(zhǎng)度相加來作為最終使用的索引

定型數(shù)組

JS中數(shù)字是以64位浮點(diǎn)格式存儲(chǔ)并按需轉(zhuǎn)換成32位整數(shù)
數(shù)組緩沖區(qū)是所有定型數(shù)組的根基,數(shù)組緩沖區(qū)包含的實(shí)際字節(jié)數(shù)量在創(chuàng)建時(shí)就已確定,可以修改緩沖區(qū)內(nèi)的數(shù)據(jù),但是不能修改緩沖區(qū)的尺寸大小

let buffer = new ArrayBuffer(10)
let buffer2 = buffer.slice(4, 6)
console.log(buffer2.byteLength)//2

數(shù)組緩沖區(qū)是內(nèi)存中的一段地址,視圖是用來操作內(nèi)存的接口,視圖可以操作數(shù)組緩沖區(qū)或緩沖區(qū)字節(jié)的子集,并按照其中一種數(shù)值型數(shù)據(jù)類型來讀取和寫入數(shù)據(jù)

let buffer = new ArrayBuffer(10),
    view1 = new DataView(buffer),
    view2 = new DataView(buffer, 5, 2);
console.log(view1.buffer === buffer)//true
console.log(view2.byteOffset)//5
console.log(view2.byteLength)//2

事實(shí)上你可以寫入兩個(gè)int8類型的值,然后使用int16類型的方法從緩沖區(qū)中讀出這些值

let buffer = new ArrayBuffer(10),
    view = new DataView(buffer);
view.setInt8(0, 5)
view.setInt8(1, -1)
console.log(view.getInt8(0))//5

定型數(shù)組實(shí)際上就是用于數(shù)組緩沖區(qū)的特定類型的視圖,你可以強(qiáng)制使用特定的數(shù)據(jù)類型,而不是通過使用通用的DataView對(duì)象來操作數(shù)組緩沖區(qū)
創(chuàng)建定型數(shù)組的方式

1、 通過數(shù)組緩沖區(qū)來生成定型數(shù)組的實(shí)例

let buffer = new ArrayBuffer(10),
    view = new Int8Array(buffer);
console.log(view.byteLength)

2、通過構(gòu)造函數(shù)中傳入一個(gè)數(shù)字,這個(gè)數(shù)字表示分配給數(shù)組的元素?cái)?shù)量

let ints = new Int32Array(10);
console.log(ints.byteLength)//20
console.log(ints.length)//10

調(diào)用定型數(shù)組的構(gòu)造函數(shù)時(shí)如果不傳參數(shù),會(huì)按照傳入0來處理,這樣由于緩沖區(qū)沒有分配到任何比特,因?yàn)閯?chuàng)建的定型數(shù)組不能用來保存數(shù)據(jù)

可以將定型數(shù)組、可迭代對(duì)象、數(shù)組、類數(shù)組對(duì)象作為構(gòu)造函數(shù)的參數(shù)傳入

let ints1 = new Int16Array([25, 50]),
    ints2 = new Int32Array(ints1);
console.log(ints1.buffer === ints2.buffer)//false
console.log(ints1.length)//2
console.log(ints2.byteLength)//8
console.log(ints2.length)//2
console.log(ints2[0])//25
console.log(ints2[1])//50

每個(gè)定型數(shù)組中元素大小指的是每個(gè)元素表示的字節(jié)數(shù),該值存儲(chǔ)在每個(gè)構(gòu)造函數(shù)和每個(gè)實(shí)例中BYTES_PER_ELEMENT屬性中

console.log(Uint32Array.BYTES_PER_ELEMENT)
定型數(shù)組和普通數(shù)組的異同點(diǎn)

相同點(diǎn):
1、可以修改length屬性來改變普通數(shù)組的大小,而定型數(shù)組的length屬性是一個(gè)不可寫屬性,所以不能修改定型數(shù)組的大小,如果嘗試修改這個(gè)值,在非嚴(yán)格模式下會(huì)直接忽略該操作,在嚴(yán)格模式下會(huì)拋出錯(cuò)誤
2、定型數(shù)組也包括許多在功能上與普通數(shù)組方法等效的方法,但是定型數(shù)組中的方法會(huì)額外的檢查數(shù)值類型是否安全
比方說:copyWithin、findIndex、lastIndexOf、slice、entries、forEach、map、some、fill、indexOf、reduce、sort、filter、join、reduceRight、values、find、keys、reverse
3、相同的迭代器(也就是keys、values、entries),這意味著可以把定型數(shù)組當(dāng)作普通數(shù)組一樣來使用展開運(yùn)算符、for of 循環(huán)

let ints = new Int16Array([25, 50]),
    intsArray = [...ints];
console.log(intsArray instanceof Array)//true
console.log(intsArray[0])//25

4、所有定型數(shù)組都包含有靜態(tài)of方法和from方法(也就是Array.of和Array.from)
差異點(diǎn):
1、定型數(shù)組不是普通數(shù)組,它不繼承自Array,通過Array.isArray方法檢測(cè)定型數(shù)組返回的是false

let ints = new Int16Array([25, 50])
console.log(ints instanceof Array)//false
console.log(Array.isArray(ints))//false

2、當(dāng)操作普通數(shù)組時(shí),其可以變大變小,但定型數(shù)組卻始終保持相同的尺寸。給定型數(shù)組中不存在的數(shù)值索引賦值會(huì)被忽略,而在普通數(shù)組中就可以

let ints = new Int16Array([25, 50]);
console.log(ints.length);//2
console.log(ints[0])//25
console.log(ints[1])//50
ints[2]=5;
console.log(ints.length)//2
console.log(ints[2])//undefined

定型數(shù)組同樣會(huì)檢查數(shù)據(jù)類型的合法性,0被用于代替所有非法值;所有修改定型數(shù)組值的就去執(zhí)行時(shí)都會(huì)受到相同限制

let ints = new Int16Array(["hi"])
console.log(ints.length)//1
console.log(ints[0])//0

3、以下方法在定型數(shù)組中不可使用,concat、shift、pop、splice、push、unshift
因?yàn)樯鲜隽斜碇谐齝oncat外,所有方法都可以改變數(shù)組的尺寸,由于定型數(shù)組的尺寸不可更改,因而這些方法不適用于定型數(shù)組,之所以concat不行是因?yàn)閮蓚€(gè)定型數(shù)組合并后的結(jié)果會(huì)變得不確定
4、定型數(shù)組新的附加方法set和subarray
set方法將其它數(shù)組復(fù)制到已有的定型數(shù)組
subarray提取已有定型數(shù)組的一部分作為一個(gè)新的定型數(shù)組

set方法接受兩個(gè)參數(shù):一個(gè)是數(shù)組(定型數(shù)組或普通數(shù)組都支持),一個(gè)是可選的偏移量,表示開始插入數(shù)據(jù)的位置,如果什么都不傳,默認(rèn)的偏移量是0

let ints = new Int16Array(4);
ints.set([25, 50])
ints.set([75, 100], 2)
console.log(ints)//[25, 50, 75, 100]

subarray方法接受兩個(gè)參數(shù):一個(gè)是可選的開始位置,一個(gè)是可選的結(jié)束位置(不包含當(dāng)前結(jié)束位置的值 ),最后返回一個(gè)新的定型數(shù)組,也可以省略這兩個(gè)參數(shù)來克隆一個(gè)新的定型數(shù)組

let ints = new Int16Array([25, 50, 75, 100]),
    subInts = ints.subarray(1, 3);
console.log(subInts)//[50, 75]

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/88502.html

相關(guān)文章

  • 深入理解ES6改進(jìn)數(shù)組功能

    摘要:方法由于構(gòu)造函數(shù)創(chuàng)建數(shù)組時(shí)的怪異行為,比方說如下方法總會(huì)創(chuàng)建一個(gè)包含所有參數(shù)的數(shù)組方法不通過屬性確定返回值的類型,它使用當(dāng)前構(gòu)造函數(shù),也就是方法中的值來確定正確的返回?cái)?shù)據(jù)的類型方法以前總是使用將類數(shù)組轉(zhuǎn)換成數(shù)組方法可接受可迭代對(duì)象或類數(shù)組對(duì) Array.of方法 由于Array構(gòu)造函數(shù)創(chuàng)建數(shù)組時(shí)的怪異行為,比方說如下: let items = new Array(2) console....

    genefy 評(píng)論0 收藏0
  • 深入理解ES6》筆記—— 改進(jìn)數(shù)組功能(10)

    摘要:創(chuàng)建數(shù)組中創(chuàng)建數(shù)組的方式數(shù)組字面量一個(gè)數(shù)組。傳入一個(gè)回調(diào)函數(shù),找到數(shù)組中符合當(dāng)前搜索規(guī)則的第一個(gè)元素,返回它,并且終止搜索。用新元素替換掉數(shù)組內(nèi)的元素,可以指定替換下標(biāo)范圍。 ES5提供的數(shù)組已經(jīng)很強(qiáng)大,但是ES6中繼續(xù)改進(jìn)了一些,主要是增加了新的數(shù)組方法,所以這章的知識(shí)非常少。 創(chuàng)建數(shù)組 ES5中創(chuàng)建數(shù)組的方式:數(shù)組字面量、new一個(gè)數(shù)組。 const arr1 = [] //數(shù)組字...

    inapt 評(píng)論0 收藏0
  • 深入理解ES6》筆記——導(dǎo)讀

    摘要:最近買了深入理解的書籍來看,為什么學(xué)習(xí)這么久還要買這本書呢主要是看到核心團(tuán)隊(duì)成員及的創(chuàng)造者為本書做了序,作為一個(gè)粉絲,還是挺看好這本書能給我?guī)硪粋€(gè)新的升華,而且本書的作者也非常厲害。 使用ES6開發(fā)已經(jīng)有1年多了,以前看的是阮一峰老師的ES6教程,也看過MDN文檔的ES6語法介紹。 最近買了《深入理解ES6》的書籍來看,為什么學(xué)習(xí)ES6這么久還要買這本書呢?主要是看到Daniel A...

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

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

0條評(píng)論

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