深入理解ES6--10.增強(qiáng)的數(shù)組功能

原創(chuàng)文章&經(jīng)驗(yàn)總結(jié)&從校招到A廠一路陽光一路滄桑

詳情請(qǐng)戳www.codercc.com

image

主要知識(shí)點(diǎn):創(chuàng)建數(shù)組橙垢、數(shù)組上的新方法肩碟、類型化數(shù)組

增強(qiáng)的數(shù)組功能的知識(shí)點(diǎn).png

1. 創(chuàng)建數(shù)組

在 ES6 之前創(chuàng)建數(shù)組主要存在兩種方式: Array 構(gòu)造器與數(shù)組字面量寫法。這兩種方式都需要將數(shù)組的項(xiàng)分別列出眨八,并且還要受到其他限制经窖。將“類數(shù)組對(duì)象”(即:擁有數(shù)值類型索引與長度屬性的對(duì)象) 轉(zhuǎn)換為數(shù)組也并不自由拜银,經(jīng)常需要書寫額外的代碼。為了使數(shù)組更易創(chuàng)建阴汇,ES6 新增了Array.of()Array.from() 方法数冬。

Array.of()方法

Array.of()方法會(huì)將方法的傳入?yún)?shù)全部作為數(shù)組里的數(shù)據(jù)內(nèi)容,而不管參數(shù)的數(shù)量與類型:

let items = Array.of(1,'2');
console.log(items); //Array(2)
console.log(items.length); //2

Array.from()方法

可使用Array.from()方法可以將類數(shù)組對(duì)象和可迭代對(duì)象轉(zhuǎn)換成數(shù)組搀庶。該方法接收三個(gè)參數(shù):

  1. 待轉(zhuǎn)換的可迭代對(duì)象或者類數(shù)組對(duì)象(具有數(shù)值索引和長度屬性的對(duì)象)拐纱;
  2. 可選的映射函數(shù);
  3. 指定映射函數(shù)內(nèi)部的 this 值哥倔;

映射轉(zhuǎn)換

如果你想實(shí)行進(jìn)一步的數(shù)組轉(zhuǎn)換秸架,你可以向 Array.from() 方法傳遞一個(gè)映射用的函數(shù)作為第二個(gè)參數(shù)。此函數(shù)會(huì)將類數(shù)組對(duì)象的每一個(gè)值轉(zhuǎn)換為目標(biāo)形式未斑,并將其存儲(chǔ)在目標(biāo)數(shù)組的對(duì)應(yīng)位置上咕宿。例如:

function trans(values){
    return Array.from(arguments,item=>item+1);
}

console.log(trans(1,2,3)); //[2, 3, 4]

可迭代對(duì)象上使用

Array.from() 方法不僅可用于類數(shù)組對(duì)象,也可用于可迭代對(duì)象蜡秽,也就是說可以將任意包含 Symbol.iterator 屬性的對(duì)象轉(zhuǎn)換成數(shù)組府阀,例如:

let obj = {
    *[Symbol.iterator](){
        yield 1;
        yield 2;
        yield 3;
    }
}

console.log(Array.from(obj)); //[1, 2, 3]

2. 數(shù)組上所有的新方法

2.1 find()和findIndex()方法

indexOf()lastIndexOf()方法用于查找特定值在數(shù)組中的位置,而如果需要查找在數(shù)組中滿足特定條件的元素就需要使用find()findIndex()方法芽突。

find() 方法和 findIndex() 方法均接受兩個(gè)參數(shù):一個(gè)是回調(diào)函數(shù)试浙、一個(gè)是可選的指定回調(diào)函數(shù)中的 this 值∧觯回調(diào)函數(shù)中有三個(gè)參數(shù):

  1. 數(shù)組中的數(shù)據(jù)項(xiàng)元素田巴;
  2. 元素在數(shù)組中的索引位置;
  3. 數(shù)組實(shí)例對(duì)象本身挟秤;

回調(diào)函數(shù)與 map()forEach() 等方法的回調(diào)函數(shù)中的參數(shù)一致壹哺。例如,需要找到在數(shù)組中大于5的元素:

let arr = Array.of(1,5,8,9);

console.log(arr.find(item=>item>5)); //8
console.log(arr.findIndex(item=>item>5)); //2

可以看出艘刚,find()方法返回的是滿足特定條件的數(shù)據(jù)項(xiàng)管宵,而 findIndex() 方法返回的是滿足特定條件的元素索引。

2.2 fill()方法

fill()方法能使用特定值填充數(shù)組中的一個(gè)或多個(gè)元素攀甚。當(dāng)只使用一個(gè)參數(shù)的時(shí)候箩朴,該方法會(huì)用該參數(shù)的值填充整個(gè)數(shù)組。若你不想改變數(shù)組中的所有元素秋度,而只想改變其中一部分炸庞,那么可以使用可選的起始位置參數(shù)與結(jié)束位置參數(shù)(不包括結(jié)束位置的那個(gè)元素)

let arr = Array.of(1,5,8,9);

console.log(arr.fill(1,2,4)); //[1, 5, 1, 1]

若只給定起始位置荚斯,不指定結(jié)束位置的話埠居,默認(rèn)結(jié)束位置為數(shù)組末尾查牌。

2.3 copyWithin()方法

copyWithin() 方法與 fill() 類似,可以一次性修改數(shù)組的多個(gè)元素滥壕。不過僧免,與 fill() 使用單個(gè)值來填充數(shù)組不同, copyWithin() 方法允許你在數(shù)組內(nèi)部復(fù)制自身元素捏浊。為此你需要傳遞兩個(gè)參數(shù)給 copyWithin() 方法:從什么位置開始進(jìn)行填充懂衩,以及被用來復(fù)制的數(shù)據(jù)的起始位置索引,以及可選的復(fù)制結(jié)束的位置(不包含該位置)

//copyWithin()
let arr = Array.of(1,5,8,9);
console.log(arr.copyWithin(2,0,2)); //[1, 5, 1, 5]

3. 類型化數(shù)組

ES6 采納了類型化數(shù)組金踪,將其作為語言的一個(gè)正式部分浊洞,以確保在 JS 引擎之間有更好的兼容性,并確保與 JS 數(shù)組有更好的互操作性胡岔。

3.1 數(shù)值數(shù)據(jù)類型

JS 數(shù)值使用 IEEE 754 標(biāo)準(zhǔn)格式存儲(chǔ)法希,使用 64 位來存儲(chǔ)一個(gè)數(shù)值的浮點(diǎn)數(shù)表示形式,該格式在 JS 中被同時(shí)用來表示整數(shù)與浮點(diǎn)數(shù)靶瘸;當(dāng)值改變時(shí)苫亦,可能會(huì)頻繁發(fā)生整數(shù)與浮點(diǎn)數(shù)之間的格式轉(zhuǎn)換。而類型化數(shù)組則允許存儲(chǔ)并操作八種不同的數(shù)值類型:

  1. 8 位有符號(hào)整數(shù)(int8)
  2. 8 位無符號(hào)整數(shù)(uint8)
  3. 16 位有符號(hào)整數(shù)(int16)
  4. 16 位無符號(hào)整數(shù)(uint16)
  5. 32 位有符號(hào)整數(shù)(int32)
  6. 32 位無符號(hào)整數(shù)(uint32)
  7. 32 位浮點(diǎn)數(shù)(float32)
  8. 64 位浮點(diǎn)數(shù)(float64)

所有與類型化數(shù)組相關(guān)的操作和對(duì)象都圍繞著這八種數(shù)據(jù)類型怨咪。為了使用它們屋剑,要先創(chuàng)建一個(gè)數(shù)組緩沖區(qū)用于存儲(chǔ)數(shù)據(jù)。

3.2 數(shù)組緩沖區(qū)

數(shù)組緩沖區(qū)(array buffer) 是內(nèi)存中包含一定數(shù)量字節(jié)的區(qū)域诗眨,而所有的類型化數(shù)組都基于數(shù)組緩沖區(qū)唉匾。創(chuàng)建數(shù)組緩沖區(qū)使用 ArrayBuffer 構(gòu)造器:

let buffer = new ArrayBuffer(10);
console.log(buffer.byteLength); //10

調(diào)用 ArrayBuffer 構(gòu)造器時(shí),只需要傳入單個(gè)數(shù)值用于指定緩沖區(qū)包含的字節(jié)數(shù)匠楚,而本例就創(chuàng)建了一個(gè) 10 字節(jié)的緩沖區(qū)巍膘。當(dāng)數(shù)組緩沖區(qū)被創(chuàng)建完畢后,你就可以通過檢查 byteLength屬性來獲取緩沖區(qū)的字節(jié)數(shù)芋簿。

還可以使用slice()方法來創(chuàng)建一個(gè)包含已有緩沖區(qū)部分內(nèi)容的數(shù)組緩沖區(qū)峡懈,其中slice()方法可以使用起始位置和結(jié)束位置(不包含結(jié)束位置):

let buffer = new ArrayBuffer(10);
let buf = buffer.slice(4,8);
console.log(buf.byteLength); //4

僅僅創(chuàng)建一個(gè)數(shù)組緩沖器不能寫入數(shù)據(jù),是沒有任何意義的与斤。要想寫入數(shù)據(jù)肪康,需要?jiǎng)?chuàng)建視圖(view)。

3.3 使用視圖操作數(shù)組緩沖區(qū)

數(shù)組緩沖區(qū)代表了一塊內(nèi)存區(qū)域幽告,而視圖(views) 則是你操作這塊區(qū)域的接口梅鹦。視圖工作在數(shù)組緩沖區(qū)或其子集上裆甩,可以讀寫某種數(shù)值數(shù)據(jù)類型的數(shù)據(jù)冗锁。 DataView 類型是數(shù)組緩沖區(qū)的通用視圖,允許你對(duì)前述所有八種數(shù)值數(shù)據(jù)類型進(jìn)行操作嗤栓。

創(chuàng)建視圖冻河,需要使用 DataView() 構(gòu)造器箍邮,可以指定可選參數(shù)-字節(jié)偏移量以及所要包含的字節(jié)數(shù)。如果不指定所要包含的字節(jié)數(shù)叨叙,則默認(rèn)為從字節(jié)偏移量直到數(shù)組緩沖區(qū)的末尾锭弊。

let buffer = new ArrayBuffer(10),
view = new DataView(buffer, 5, 2);

此例中的 view 只能使用索引值為 5 與 6 的字節(jié)。使用這種方式擂错,你可以在同一個(gè)數(shù)組緩沖區(qū)上創(chuàng)建多個(gè)不同的視圖味滞,這樣有助于將單塊內(nèi)存區(qū)域供給整個(gè)應(yīng)用使用,而不必每次在有需要時(shí)才動(dòng)態(tài)分配內(nèi)存钮呀。

獲取視圖信息

可以通過視圖的可讀屬性來獲取視圖的信息:

  • buffer :該視圖所綁定的數(shù)組緩沖區(qū)剑鞍;
  • byteOffset :傳給 DataView 構(gòu)造器的第二個(gè)參數(shù),如果當(dāng)時(shí)提供了的話(默認(rèn)值為0);
  • byteLength :傳給 DataView 構(gòu)造器的第三個(gè)參數(shù)爽醋,如果當(dāng)時(shí)提供了的話(默認(rèn)值為該緩沖區(qū)的 byteLength 屬性蚁署。

讀取或?qū)懭霐?shù)據(jù)

對(duì)應(yīng)于 JS 所有八種數(shù)值數(shù)據(jù)類型, DataView 視圖的原型分別提供了在數(shù)組緩沖區(qū)上寫入數(shù)據(jù)的一個(gè)方法蚂四、以及讀取數(shù)據(jù)的一個(gè)方法光戈。所有方法名都以“set”或“get”開始,其后跟隨著對(duì)應(yīng)數(shù)據(jù)類型的縮寫遂赠。下面列出了能夠操作 int8uint8 類型的讀取/寫入方法:

  • getInt8(byteOffset, littleEndian) :從 byteOffset 處開始讀取一個(gè) int8 值久妆;
  • setInt8(byteOffset, value, littleEndian) :從 byteOffset 處開始寫入一個(gè) int8 值;
  • getUint8(byteOffset, littleEndian) :從 byteOffset 處開始讀取一個(gè)無符號(hào) int8 值跷睦;
  • setUint8(byteOffset, value, littleEndian) :從 byteOffset 處開始寫入一個(gè)無符號(hào)int8 值镇饺。

get”方法接受兩個(gè)參數(shù):開始進(jìn)行讀取的字節(jié)偏移量、以及一個(gè)可選的布爾值送讲,后者用于指定讀取的值是否采用低字節(jié)優(yōu)先方式(注:默認(rèn)值為 false ) 奸笤。“set”方法則接受三個(gè)參數(shù):開始進(jìn)行寫入的字節(jié)偏移量哼鬓、需要寫入的數(shù)據(jù)值监右、以及一個(gè)可選的布爾值用于指定是否采用低字節(jié)優(yōu)先方式存儲(chǔ)數(shù)據(jù)。

如果針對(duì)的是16位或者32位整數(shù)的話异希,只需要將上面的方法中的8健盒,相應(yīng)的改變成16或者32,就可以操作16位或者32值称簿。

操作浮點(diǎn)數(shù)扣癣,提供了下面這些方法:

  • getFloat32(byteOffset, littleEndian) :從 byteOffset 處開始讀取一個(gè) 32 位的浮點(diǎn)數(shù);
  • setFloat32(byteOffset, value, littleEndian) :從 byteOffset 處開始寫入一個(gè) 32 位的浮點(diǎn)數(shù)憨降;
  • getFloat64(byteOffset, littleEndian) :從 byteOffset 處開始讀取一個(gè) 64 位的浮點(diǎn)數(shù)父虑;
  • setFloat64(byteOffset, value, littleEndian) :從 byteOffset 處開始寫入一個(gè) 64 位的浮點(diǎn)數(shù);

例如使用上述這些視圖上的方法來進(jìn)行操作:

let buffer = new ArrayBuffer(2),
view = new DataView(buffer);

view.setInt8(0,1);
console.log(view.getInt8(0)); //1

3.4 類型化數(shù)組就是視圖

ES6 的類型化數(shù)組實(shí)際上也是針對(duì)數(shù)組緩沖區(qū)的特定類型視圖授药,你可以使用這些數(shù)組對(duì)象來處理特定的數(shù)據(jù)類型士嚎,而不必使用通用的 DataView 對(duì)象呜魄。一共存在八種特定類型視圖,對(duì)應(yīng)著八種數(shù)值數(shù)據(jù)類型莱衩。類型化數(shù)組的構(gòu)造器有:Int8Array爵嗅、Uint8Array、Uint8ClampedArray笨蚁、Int16Array睹晒、Uint16Array、Int32Array括细、Uint32Array册招、Float32Array、Float64Array勒极。

創(chuàng)建特定類型視圖

創(chuàng)建特定類型視圖有三種方式:

  1. 第一種方式是使用與創(chuàng)建 DataView 時(shí)相同的參數(shù)是掰,即:一個(gè)數(shù)組緩沖區(qū)、一個(gè)可選的字節(jié)偏移量辱匿、以及一個(gè)可選的字節(jié)數(shù)量键痛;

  2. 第二種方式是傳遞單個(gè)數(shù)值給類型化數(shù)組的構(gòu)造器,此數(shù)值表示該數(shù)組包含的元素?cái)?shù)量(而不是分配的字節(jié)數(shù)) 匾七。構(gòu)造器將會(huì)創(chuàng)建一個(gè)新的緩沖區(qū)絮短,分配正確的字節(jié)數(shù)以便容納指定數(shù)量的數(shù)組元素,而你也可以使用 length 屬性來獲取這個(gè)元素?cái)?shù)量昨忆;

  3. 第三種方式是向構(gòu)造器傳遞單個(gè)對(duì)象參數(shù)丁频,可以是下列四種對(duì)象之一:

    1. 類型化數(shù)組:數(shù)組所有元素都會(huì)被復(fù)制到新的類型化數(shù)組中。例如邑贴,如果你傳遞一個(gè) int8類型的數(shù)組給 Int16Array 構(gòu)造器席里,這些 int8 的值會(huì)被復(fù)制到 int16 數(shù)組中。新的類型化數(shù)組與原先的類型化數(shù)組會(huì)使用不同的數(shù)組緩沖區(qū)拢驾。
    2. 可迭代對(duì)象:該對(duì)象的迭代器會(huì)被調(diào)用以便將數(shù)據(jù)插入到類型化數(shù)組中奖磁。如果其中包含了不匹配視圖類型的值,那么構(gòu)造器就會(huì)拋出錯(cuò)誤繁疤。
    3. 數(shù)組:該數(shù)組的元素會(huì)被插入到新的類型化數(shù)組中咖为。如果其中包含了不匹配視圖類型的值,那么構(gòu)造器就會(huì)拋出錯(cuò)誤稠腊。
    4. 類數(shù)組對(duì)象:與傳入數(shù)組的表現(xiàn)一致躁染。

    //第一種方式
    let buffer = new ArrayBuffer(10),
    view1 = new Int8Array(buffer),
    view2 = new Int8Array(buffer, 5, 2);

    //第二種方式
    let ints = new Int16Array(2),
    floats = new Float32Array(5);

    //第三種方式
    let ints1 = new Int16Array([25, 50]),
    ints2 = new Int32Array(ints1);

3.5 類型化數(shù)組與常規(guī)數(shù)組的相似點(diǎn)

類型化數(shù)組在很多場景中都可以像常規(guī)數(shù)組那樣被使用。例如架忌,你可以使用 length 屬性來獲取類型化數(shù)組包含的元素?cái)?shù)量吞彤,還可以使用數(shù)值類型的索引值來直接訪問類型化數(shù)組的元素。它們二者具有的相似點(diǎn):

  1. 公共方法

類型化數(shù)組擁有大量與常規(guī)數(shù)組等效的方法:

  • copyWithin()
  • entries()
  • fill()
  • filter()
  • find()
  • findIndex()
  • forEach()
  • indexOf()
  • join()
  • keys()
  • lastIndexOf()
  • map()
  • reduce()
  • reduceRight()
  • reverse()
  • slice()
  • some()
  • sort()
  • values()

相同的迭代器

與常規(guī)數(shù)組相同鳖昌,類型化數(shù)組也擁有三個(gè)迭代器备畦,它們是 entries() 方法、 keys()方法與values() 方法许昨。這就意味著你可以對(duì)類型化數(shù)組使用擴(kuò)展運(yùn)算符懂盐,或者對(duì)其使用 for-of 循環(huán),就像對(duì)待常規(guī)數(shù)組糕档。

of()和from()方法

所有的類型化數(shù)組都包含靜態(tài)的of()from() 方法莉恼,作用類似于 Array.of()Array.from() 方法。其中的區(qū)別是類型化數(shù)組的版本會(huì)返回類型化數(shù)組速那,而不返回常規(guī)數(shù)組俐银。

3.5 類型化數(shù)組與常規(guī)數(shù)組的差異

二者最重要的區(qū)別就是類型化數(shù)組并不是常規(guī)數(shù)組,類型化數(shù)組并不是從 Array 對(duì)象派生的端仰,使用 Array.isArray() 去檢測會(huì)返回 false 捶惜。

行為差異

常規(guī)數(shù)組可以被伸展或是收縮,然而類型化數(shù)組卻會(huì)始終保持自身大小不變荔烧。你可以對(duì)常規(guī)數(shù)組一個(gè)不存在的索引位置進(jìn)行賦值吱七,但在類型化數(shù)組上這么做則會(huì)被忽略。

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

在本例中鹤竭,盡管對(duì)索引值 2 的位置進(jìn)行了賦值為 5 的操作踊餐,但 ints 數(shù)組卻完全沒有被伸展,數(shù)組的長度屬性保持不變臀稚,所賦的值也被丟棄了吝岭。

類型化數(shù)組也會(huì)對(duì)數(shù)據(jù)類型進(jìn)行檢查以保證只使用有效的值,當(dāng)無效的值被傳入時(shí)吧寺,將會(huì)被替換為 0 窜管。

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

這段代碼試圖用字符串值 "hi" 創(chuàng)建一個(gè) Int16Array ,而字符串對(duì)于類型化數(shù)組來說當(dāng)然是無效的值稚机,因此該字符串被替換為 0 并插入數(shù)組微峰。此數(shù)組的長度僅僅是 1 ,而 ints[0]只包含了 0 這個(gè)值抒钱。

所有在類型化數(shù)組上修改項(xiàng)目值的方法都會(huì)受到相同的限制蜓肆,例如當(dāng) map() 方法使用的映射函數(shù)返回一個(gè)無效值的時(shí)候,類型化數(shù)組會(huì)使用 0 來代替返回值

let ints = new Int16Array([25, 50]),
mapped = ints.map(v => "hi");
console.log(mapped.length); // 2
console.log(mapped[0]); // 0
console.log(mapped[1]); // 0
console.log(mapped instanceof Int16Array); // true
console.log(mapped instanceof Array); // false

由于字符串值 "hi" 并不是一個(gè) 16 位整數(shù)谋币,它在結(jié)果數(shù)組中就被替換成為 0 仗扬。

遺漏的方法

盡管類型化數(shù)組擁有常規(guī)數(shù)組的很多同名方法,但仍然缺少了幾個(gè)數(shù)組方法蕾额,包括下列這些:

  • concat()
  • pop()
  • push()
  • shift()
  • splice()
  • unshift()

附加的方法

類型化數(shù)組還有兩個(gè)常規(guī)數(shù)組所不具備的方法: set() 方法與 subarray() 方法早芭。這兩個(gè)方法作用相反: set() 方法從另一個(gè)數(shù)組中復(fù)制元素到當(dāng)前的類型化數(shù)組,而 subarray() 方法則是將當(dāng)前類型化數(shù)組的一部分提取為新的類型化數(shù)組诅蝶。

**set() 方法接受一個(gè)數(shù)組參數(shù)(無論是類型化的還是常規(guī)的) 退个、以及一個(gè)可選的偏移量參數(shù)辐董,后者指示了從什么位置開始插入數(shù)據(jù)(默認(rèn)值為 0 ) **。數(shù)組參數(shù)中的數(shù)據(jù)會(huì)被復(fù)制到目標(biāo)類型化數(shù)組中派草,并會(huì)確保數(shù)據(jù)值有效赘方。

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

這段代碼創(chuàng)建了一個(gè)包含四個(gè)元素的 Int16Array ;第一次調(diào)用 set() 復(fù)制了兩個(gè)值到數(shù)組起始的兩個(gè)位置刀荒;而第二次調(diào)用set() 則使用了一個(gè)值為 2 的偏移量參數(shù)代嗤,指明應(yīng)當(dāng)從數(shù)組的第三個(gè)位置(索引 2 ) 開始放置所復(fù)制的數(shù)據(jù)。

subarray() 方法接受一個(gè)可選的開始位置索引參數(shù)缠借、以及一個(gè)可選的結(jié)束位置索引參數(shù)(像slice() 方法一樣干毅,結(jié)束位置的元素不會(huì)被包含在結(jié)果中) ,并會(huì)返回一個(gè)新的類型化數(shù)組泼返。你可以同時(shí)省略這兩個(gè)參數(shù)硝逢,從而創(chuàng)建原類型化數(shù)組的一個(gè)復(fù)制品。

let ints = new Int16Array([25, 50, 75, 100]),
subints1 = ints.subarray(),
subints2 = ints.subarray(2),
subints3 = ints.subarray(1, 3);
console.log(subints1.toString()); // 25,50,75,100
console.log(subints2.toString()); // 75,100
console.log(subints3.toString()); // 50,75

本例中利用 ints 數(shù)組創(chuàng)建了三個(gè)類型化數(shù)組绅喉。 subints1 數(shù)組是 ints 的一個(gè)復(fù)制品趴捅,包含了原數(shù)組的所有信息;而 subints2 則從原數(shù)組的索引 2 位置開始復(fù)制霹疫,因此包含了原數(shù)組的最末兩個(gè)元素(即 75 與 100 ) 拱绑;最后的 subints3 數(shù)組值包含了原數(shù)組的中間兩個(gè)元素,因?yàn)檎{(diào)用 subarray() 時(shí)同時(shí)使用了起始位置與結(jié)束位置參數(shù)丽蝎。

4. 總結(jié)

  1. ES6 延續(xù)了 ES5 的工作以便讓數(shù)組更加有用猎拨。新增了兩種創(chuàng)建數(shù)組的方式: Array.of() 方法、以及 Array.from() 方法屠阻,其中后者可以將可迭代對(duì)象或類數(shù)組對(duì)象轉(zhuǎn)換為正規(guī)數(shù)組红省;
  2. fill() 方法與 copyWithin() 方法允許你替換數(shù)組內(nèi)的元素。 find() 方法與 findIndex() 方法在數(shù)組中查找滿足特定條件的元素時(shí)會(huì)非常有用国觉,其中前者會(huì)返回滿足條件的第一個(gè)元素吧恃,而后者會(huì)返回該元素的索引位置;
  3. 類型化數(shù)組并不是嚴(yán)格的數(shù)組麻诀,它們并沒有繼承 Array 對(duì)象痕寓,但它們的外觀和行為都與數(shù)組有許多相似點(diǎn)。類型化數(shù)組包含的數(shù)據(jù)類型是八種數(shù)值數(shù)據(jù)類型之一蝇闭,基于數(shù)組緩沖區(qū)對(duì)象建立呻率,用于表示按位存儲(chǔ)的一個(gè)數(shù)值或一系列數(shù)值。類型化數(shù)組能夠明顯提升按位運(yùn)算的性能呻引,因?yàn)樗幌?JS 的常規(guī)數(shù)值類型那樣需要頻繁進(jìn)行格式轉(zhuǎn)換礼仗。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子元践,更是在濱河造成了極大的恐慌韭脊,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件单旁,死亡現(xiàn)場離奇詭異沪羔,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)慎恒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門任内,熙熙樓的掌柜王于貴愁眉苦臉地迎上來撵渡,“玉大人融柬,你說我怎么就攤上這事∏骶啵” “怎么了粒氧?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長节腐。 經(jīng)常有香客問我外盯,道長,這世上最難降的妖魔是什么翼雀? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任饱苟,我火速辦了婚禮,結(jié)果婚禮上狼渊,老公的妹妹穿的比我還像新娘箱熬。我一直安慰自己,他們只是感情好狈邑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布城须。 她就那樣靜靜地躺著,像睡著了一般米苹。 火紅的嫁衣襯著肌膚如雪糕伐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天蘸嘶,我揣著相機(jī)與錄音良瞧,去河邊找鬼。 笑死训唱,一個(gè)胖子當(dāng)著我的面吹牛莺褒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播雪情,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼遵岩,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起尘执,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤舍哄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后誊锭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體表悬,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年丧靡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蟆沫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡温治,死狀恐怖饭庞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情熬荆,我是刑警寧澤舟山,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站卤恳,受9級(jí)特大地震影響累盗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜突琳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一若债、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拆融,春花似錦蠢琳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至逛艰,卻和暖如春躏碳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背散怖。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國打工菇绵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人镇眷。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓咬最,卻偏偏與公主長得像,于是被迫代替她去往敵國和親欠动。 傳聞我的和親對(duì)象是個(gè)殘疾皇子永乌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容