前言
前兩天看了別人寫的博客,對某些知識點挖掘的深度和對知識點描述語言的通俗令我贊嘆。
我寫的這一系列讀書筆記的初衷是想寫給自己備忘的。
最初的目的,是想要翻到這個文章,就能夠自己看的懂描述。
畢竟有些東西,不常用,細節(jié)不一定記得那么清楚。
新的方法
Array.of()
舊的構造數(shù)組方式new Array()
的行為詭異,如果只傳入一個參數(shù),并且這個參數(shù)是數(shù)字,那么會構造出來一個長度為這個數(shù)字的數(shù)組。
Array.of()
統(tǒng)一了行為,加入的項只會是數(shù)組的內(nèi)容。
Array.from()
在ES5中,如果需要將類數(shù)組轉(zhuǎn)變?yōu)閿?shù)組,需要下面的代碼:
let arr = Array.prototype.slice.call(arrayLike);
ES6中,我們可以使用Array.from():
/*
* Array.from(arrayLike[, mapFn[, thisArg]])
* 一參為類數(shù)組
* 二參為類似map的函數(shù)
* 三參為函數(shù)的this指向
*/
let arr = Array.from(arrayLike)
Array.prototype.find(callback[,thisArg])
callback有三個參數(shù),item,index,thisArray
thisArg為callback的this指向
返回值為通過callback測試的值的集合,若無,則為undefined
Array.prototype.findIndex(callback[,thisArg])
和find方法的區(qū)別就是,返回值是通過callback測試的索引值的集合
Array.prototype.fill(特定的值[,起點][,終點(可為負)])
好像沒有什么好描述的
對了,這個主要用在類型數(shù)組(typed array)
Array.prototype.copyWithin(target[, start][, end])
數(shù)組內(nèi)部的自復制,感覺有點難理解,還是上一段代碼吧。
['alpha', 'bravo', 'charlie', 'delta'].copyWithin(2, 0);
// results in ["alpha", "bravo", "alpha", "bravo"]
target,目標的起始位置
start,復制的起始位置,默認為0
end,復制的終點位置,默認為數(shù)組最后一項的位置
這個主要用在類型數(shù)組(typed array)
Typed Array
Typed Array 主要是為了WebGL 和OPEN GL ES2.0設計的
數(shù)字類型
- int8
- uint8
- int16
- uint16
- int32
- uint32
- float32
- float64
Array Buffers
創(chuàng)建buffer
let buffer = new ArrayBuffer(10) //調(diào)用c的malloc()方法,創(chuàng)建一個10字節(jié)的buffer
let buffer2 = buffer.slice(4,6)//生成新buffer,渠道上一buffer的4和5位
用視圖操作buffer數(shù)組
//DataView(buffer[,byteOffset][,byteLength])
let buffer = new ArrayBuffer(10),
views = new DataView(buffer,5,2);
view.byteOffset //5
view.byteLength //2
讀寫數(shù)據(jù)
下面是操作8字節(jié)的方法, 操作16字節(jié)和32字節(jié)整型的方法只需要將下列方法中的8替換為16或者32.
getInt8(byteOffset, littleEndian)
setInt8(byteOffset, value, littleEndian)
getUint8(byteOffset, littleEndian)
setUint8(byteOffset, value, littleEndian)
下面是操作浮點數(shù)的方法
getFloat32(byteOffset, littleEndian)
setFloat32(byteOffset, value, littleEndian)
getFloat64(byteOffset, littleEndian)
setFloat64(byteOffset, value, littleEndian)
我擦,感覺好麻煩。不過,也有簡化一點的法子
創(chuàng)建特定類型的視圖
//Int8Array(buffer[,byteOffset][,byteLength])
let buffer = new ArrayBuffer(10),
views = new Int8Array(buffer,5,2);
view.byteOffset //5
view.byteLength //2
可以將以下對象作為參數(shù)傳入構造函數(shù)
- A typed array
- An iterable
- An array
- An array-like object
各種類型構造函數(shù)
Int8Array(buffer[,byteOffset][,byteLength])
Int16Array(buffer[,byteOffset][,byteLength])
Int32Array(buffer[,byteOffset][,byteLength])
Float32Array(buffer[,byteOffset][,byteLength])
這些方法的屬性
- byteOffset
- byteLength
- length
- buffer
類型數(shù)組和正常數(shù)組相同點
可以通過索引值直接取值
值得注意的是,類型數(shù)組無法改變長度
共同的方法
- copyWithin()
- findIndex()
- lastIndexOf()
- slice()
- forEach()
- map()
- some()
- fill()
- indexOf()
- reduce()
- sort()
- filter()
- join()
- reduceRight()
- entries()
- values()
- keys()
- reverse()
雖然方法是一樣的,但是還是有些細微的差別
- 會檢測返回的數(shù)組的數(shù)字類型是不是合理
- 根據(jù)
[Symbol.species]
確定返回的是類型數(shù)組還是常規(guī)數(shù)組
iterator接口
都具備iterator接口。
類型數(shù)組通過...接口時,會轉(zhuǎn)換成常規(guī)數(shù)組
of()
和from()
方法
類型數(shù)組返回的都是類型數(shù)組
類型數(shù)組和正常數(shù)組不同點
- 類型數(shù)組的長度不可改變
- 類型數(shù)組中的項,如非正常數(shù)字,則替換為0
- 有些正常數(shù)組的方法,類型數(shù)組是沒有的。因為類型數(shù)組不能改變數(shù)組長度,所以
concat()
,shift()
,pop()
,unshift()
,push()
的方法是沒有的。
類型數(shù)組新增的方法
TypedArray.prototype.set(typedarray/array [,offset])
第一個參數(shù)可以使類型數(shù)組或者常規(guī)數(shù)組
二參為寫入類型數(shù)組的起始位置,默認為0
TypedArray.prototype.subarray([begin [,end]])
第一個參數(shù)為拷貝數(shù)組的起始位置,默認為0
二參為拷貝數(shù)組的終止位置,默認為數(shù)組的長度