摘要:在可迭代對象上使用所有數(shù)組上的新方法與方法與方法均接受兩個參數(shù)一個回調(diào)函數(shù)一個可選值用于指定回調(diào)函數(shù)內(nèi)部的?;卣{(diào)函數(shù)可接收三個參數(shù)數(shù)組的某個元素該元素對應(yīng)的索引位置以及該數(shù)組自身。
主要知識點(diǎn):創(chuàng)建數(shù)組、數(shù)組上的新方法、類型化數(shù)組
《深入理解ES6》筆記 目錄
創(chuàng)建數(shù)組ES5中創(chuàng)建數(shù)組的方式:數(shù)組字面量、new一個數(shù)組。
const arr1 = [] //數(shù)組字面量 const arr2 = new Array() //new構(gòu)建
ES6創(chuàng)建數(shù)組:Array.of()、Array.from()
Array.of() 方法調(diào)用 new Array() 構(gòu)造器時,根據(jù)傳入?yún)?shù)的類型與數(shù)量的不同,實際上會導(dǎo)致一些不同的結(jié)果:
let items = new Array(2); console.log(items.length); // 2 console.log(items[0]); // undefined console.log(items[1]); // undefined items = new Array("2"); console.log(items.length); // 1 console.log(items[0]); // "2" items = new Array(1, 2); console.log(items.length); // 2 console.log(items[0]); // 1 console.log(items[1]); // 2 items = new Array(3, "2"); console.log(items.length); // 2 console.log(items[0]); // 3 console.log(items[1]); // "2"
ES6 引入了 Array.of() 方法來解決這個怪異問題:
Array.of() 方法創(chuàng)建一個包含所有傳入?yún)?shù)的數(shù)組,而不管參數(shù)的數(shù)量與類型:
let items = Array.of(1, 2); console.log(items.length); // 2 console.log(items[0]); // 1 console.log(items[1]); // 2 items = Array.of(2); console.log(items.length); // 1 console.log(items[0]); // 2 items = Array.of("2"); console.log(items.length); // 1 console.log(items[0]); // "2"Array.from() 方法
Array.from()是將類數(shù)組轉(zhuǎn)換成數(shù)組。
ES5 中,將非數(shù)組對象轉(zhuǎn)換為真正的數(shù)組需要編寫一個函數(shù),類似下面這樣:
function makeArray(arrayLike) { var result = []; for (var i = 0, len = arrayLike.length; i < len; i++) { result.push(arrayLike[i]); } return result; } function doSomething() { var args = makeArray(arguments); // 使用 args }
也可以調(diào)用數(shù)組原生的 slice() 方法來減少代碼量,就像這樣:
function makeArray(arrayLike) { return Array.prototype.slice.call(arrayLike); } function doSomething() { var args = makeArray(arguments); // 使用 args }
Array.from()是將類數(shù)組轉(zhuǎn)換成數(shù)組:
function doSomething() { var args = Array.from(arguments); // 使用 args }映射轉(zhuǎn)換
Array.from(arg1, arg2),我們可以給該方法提供2個參數(shù),第二個參數(shù)作為第一個參數(shù)的轉(zhuǎn)換:
function translate() { return Array.from(arguments, (value) => value + 1); } let numbers = translate(1, 2, 3); console.log(numbers); // 2,3,4
Array.from還可以設(shè)置第三個參數(shù),指定this。
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在可迭代對象上使用
let numbers = { *[Symbol.iterator]() { yield 1; yield 2; yield 3; } }; let numbers2 = Array.from(numbers, (value) => value + 1); console.log(numbers2); // 2,3,4所有數(shù)組上的新方法 find() 與 findIndex() 方法
find() 與 findIndex() 方法均接受兩個參數(shù):一個回調(diào)函數(shù)、一個可選值用于指定回調(diào)函數(shù)內(nèi)部的 this 。
回調(diào)函數(shù)可接收三個參數(shù):數(shù)組的某個元素、該元素對應(yīng)的索引位置、以及該數(shù)組自身。
二者唯一的區(qū)別是: find() 方法會返回匹配的值,而 findIndex() 方法則會返回匹配位置的索引。
let numbers = [25, 30, 35, 40, 45]; console.log(numbers.find(n => n > 33)); // 35 console.log(numbers.findIndex(n => n > 33)); // 2fill() 方法
用新元素替換掉數(shù)組內(nèi)的元素,可以指定替換下標(biāo)范圍:arr.fill(value, start, end)
let numbers = [1, 2, 3, 4]; numbers.fill(1); console.log(numbers.toString()); // 1,1,1,1 let numbers = [1, 2, 3, 4]; numbers.fill(1, 2); console.log(numbers.toString()); // 1,2,1,1 numbers.fill(0, 1, 3); console.log(numbers.toString()); // 1,0,0,1copyWithin() 方法
選擇數(shù)組的某個下標(biāo),從該位置開始復(fù)制數(shù)組元素,默認(rèn)從0開始復(fù)制。也可以指定要復(fù)制的元素范圍:
let numbers = [1, 2, 3, 4]; // 從索引 2 的位置開始粘貼 // 從數(shù)組索引 0 的位置開始復(fù)制數(shù)據(jù) numbers.copyWithin(2, 0); console.log(numbers.toString()); // 1,2,1,2 let numbers = [1, 2, 3, 4]; // 從索引 2 的位置開始粘貼 // 從數(shù)組索引 0 的位置開始復(fù)制數(shù)據(jù) // 在遇到索引 1 時停止復(fù)制 numbers.copyWithin(2, 0, 1); console.log(numbers.toString()); // 1,2,1,4
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/97015.html
摘要:將對象的屬性拷貝到了對象,合并成一個新的對象。而這種行為也是新增的標(biāo)準(zhǔn)??偨Y(jié)本章講解了對象字面量語法拓展,新增方法,允許重復(fù)的對象字面量屬性,自有枚舉屬性排序,增強(qiáng)對象原型,明確了方法的定義。但是,就算把全部新增的功能記住也不是難事。 變量功能被加強(qiáng)了、函數(shù)功能被加強(qiáng)了,那么作為JavaScript中最普遍的對象,不加強(qiáng)對得起觀眾嗎? 對象類別 在ES6中,對象分為下面幾種叫法。(不需...
摘要:創(chuàng)建數(shù)組中創(chuàng)建數(shù)組的方式數(shù)組字面量一個數(shù)組。傳入一個回調(diào)函數(shù),找到數(shù)組中符合當(dāng)前搜索規(guī)則的第一個元素,返回它,并且終止搜索。用新元素替換掉數(shù)組內(nèi)的元素,可以指定替換下標(biāo)范圍。 ES5提供的數(shù)組已經(jīng)很強(qiáng)大,但是ES6中繼續(xù)改進(jìn)了一些,主要是增加了新的數(shù)組方法,所以這章的知識非常少。 創(chuàng)建數(shù)組 ES5中創(chuàng)建數(shù)組的方式:數(shù)組字面量、new一個數(shù)組。 const arr1 = [] //數(shù)組字...
摘要:最近買了深入理解的書籍來看,為什么學(xué)習(xí)這么久還要買這本書呢主要是看到核心團(tuán)隊成員及的創(chuàng)造者為本書做了序,作為一個粉絲,還是挺看好這本書能給我?guī)硪粋€新的升華,而且本書的作者也非常厲害。 使用ES6開發(fā)已經(jīng)有1年多了,以前看的是阮一峰老師的ES6教程,也看過MDN文檔的ES6語法介紹。 最近買了《深入理解ES6》的書籍來看,為什么學(xué)習(xí)ES6這么久還要買這本書呢?主要是看到Daniel A...
閱讀 3427·2023-04-26 03:05
閱讀 1498·2019-08-30 13:09
閱讀 1934·2019-08-30 13:05
閱讀 921·2019-08-29 12:42
閱讀 1430·2019-08-28 18:18
閱讀 3475·2019-08-28 18:09
閱讀 548·2019-08-28 18:00
閱讀 1745·2019-08-26 12:10