原創(chuàng)文章&經(jīng)驗(yàn)總結(jié)&從校招到A廠一路陽光一路滄桑
詳情請(qǐng)戳www.codercc.com
主要知識(shí)點(diǎn):創(chuàng)建數(shù)組橙垢、數(shù)組上的新方法肩碟、類型化數(shù)組
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ù):
- 待轉(zhuǎn)換的可迭代對(duì)象或者類數(shù)組對(duì)象(具有數(shù)值索引和長度屬性的對(duì)象)拐纱;
- 可選的映射函數(shù);
- 指定映射函數(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ù):
- 數(shù)組中的數(shù)據(jù)項(xiàng)元素田巴;
- 元素在數(shù)組中的索引位置;
- 數(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ù)值類型:
- 8 位有符號(hào)整數(shù)(int8)
- 8 位無符號(hào)整數(shù)(uint8)
- 16 位有符號(hào)整數(shù)(int16)
- 16 位無符號(hào)整數(shù)(uint16)
- 32 位有符號(hào)整數(shù)(int32)
- 32 位無符號(hào)整數(shù)(uint32)
- 32 位浮點(diǎn)數(shù)(float32)
- 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ù)類型的縮寫遂赠。下面列出了能夠操作 int8
或 uint8
類型的讀取/寫入方法:
- 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)建特定類型視圖有三種方式:
第一種方式是使用與創(chuàng)建 DataView 時(shí)相同的參數(shù)是掰,即:一個(gè)數(shù)組緩沖區(qū)、一個(gè)可選的字節(jié)偏移量辱匿、以及一個(gè)可選的字節(jié)數(shù)量键痛;
第二種方式是傳遞單個(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ù)量昨忆;
-
第三種方式是向構(gòu)造器傳遞單個(gè)對(duì)象參數(shù)丁频,可以是下列四種對(duì)象之一:
- 類型化數(shù)組:數(shù)組所有元素都會(huì)被復(fù)制到新的類型化數(shù)組中。例如邑贴,如果你傳遞一個(gè) int8類型的數(shù)組給 Int16Array 構(gòu)造器席里,這些 int8 的值會(huì)被復(fù)制到 int16 數(shù)組中。新的類型化數(shù)組與原先的類型化數(shù)組會(huì)使用不同的數(shù)組緩沖區(qū)拢驾。
- 可迭代對(duì)象:該對(duì)象的迭代器會(huì)被調(diào)用以便將數(shù)據(jù)插入到類型化數(shù)組中奖磁。如果其中包含了不匹配視圖類型的值,那么構(gòu)造器就會(huì)拋出錯(cuò)誤繁疤。
- 數(shù)組:該數(shù)組的元素會(huì)被插入到新的類型化數(shù)組中咖为。如果其中包含了不匹配視圖類型的值,那么構(gòu)造器就會(huì)拋出錯(cuò)誤稠腊。
- 類數(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):
- 公共方法
類型化數(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é)
- ES6 延續(xù)了 ES5 的工作以便讓數(shù)組更加有用猎拨。新增了兩種創(chuàng)建數(shù)組的方式: Array.of() 方法、以及 Array.from() 方法屠阻,其中后者可以將可迭代對(duì)象或類數(shù)組對(duì)象轉(zhuǎn)換為正規(guī)數(shù)組红省;
- fill() 方法與 copyWithin() 方法允許你替換數(shù)組內(nèi)的元素。 find() 方法與 findIndex() 方法在數(shù)組中查找滿足特定條件的元素時(shí)會(huì)非常有用国觉,其中前者會(huì)返回滿足條件的第一個(gè)元素吧恃,而后者會(huì)返回該元素的索引位置;
- 類型化數(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)換礼仗。