[譯]ES入門(第三部分)

原文戳這里

[譯]ES6入門(第一部分)

[譯]ES6入門(第二部分)

這篇文章的第1部分出現(xiàn)在這里

文章的第2部分出現(xiàn)在這里

我將在本文中介紹的主題

1、數(shù)組映射

2败徊、數(shù)組過濾器

3、數(shù)組降維

4无蜂、模板文字

5易结、導(dǎo)入和導(dǎo)出

6、解構(gòu)對象和數(shù)組

7线欲、extend和super

數(shù)組映射

Map運算符用于對數(shù)組的所有元素執(zhí)行特定操作,并返回包含已修改元素的數(shù)組汽摹。

它很容易實現(xiàn)李丰。我們來看一個例子吧。

let arr = [1,2,3,4,5];
let modifiedArr = arr.map(function(element逼泣,index趴泌,arr){ 
  return element * 10; 
}); 
console.log(modifiedArr);
輸出:
[10,20,30,40,50]

如您所見,map使用帶三個參數(shù)的函數(shù)拉庶。

第一個參數(shù)是元素本身嗜憔。

第二個參數(shù)是元素的索引。

第三個參數(shù)是整個數(shù)組氏仗。

并且還要注意我們最終必須返回一些值吉捶。這將是該元素的修改值。如果您沒有返回任何內(nèi)容,那么特定元素將是未定義的呐舔。

另外币励,我想說的是第二個和第三個參數(shù)只是可選的。只有第一個參數(shù)是必需的滋早。

let modifiedArr = arr.map(function(element){ 
  return element * 10; 
});

如您所見,map使用單個參數(shù)的函數(shù)砌们。

好吧..讓我們嘗試用箭頭函數(shù)編寫map運算符杆麸。

let modifiedArr = arr.map((element,index)=> { 
  console.log(“index”+ index); 
  return element * 10; 
}); 
console.log(modifiedArr);
輸出:
index 0 
index 1 
index 2 
index 3 
index 4 
[10,20,30,40,50]

我想我不必多解釋浪感。這很簡單昔头。

最后一個例子。

let modifiedArr = arr.map(element => element * 10); 
console.log(modifiedArr);

酷吧:)

如果你很了解箭頭函數(shù)影兽,它應(yīng)該很容易理解揭斧。但如果你沒有明白它,我會嘗試解釋峻堰。

這里有兩件事要解釋讹开。

1、如果一個函數(shù)帶有單個參數(shù)捐名,則不需要()旦万。在我們的例子中,element是參數(shù)镶蹋。

2成艘、如果單行代碼作為函數(shù)體,則不需要{}贺归,并且JS將在執(zhí)行函數(shù)后隱式返回值淆两。您不必使用return關(guān)鍵字。

數(shù)組過濾器

數(shù)組過濾器用于根據(jù)某些條件過濾整個數(shù)組拂酣。數(shù)組過濾器獲取數(shù)組的每個元素并檢查給定條件秋冰。如果元素通過條件,它將元素保留在數(shù)組中婶熬,否則它將刪除元素丹莲。

讓我們看一些例子。

let arr = [1,2,3,4,5,6] 
let modifiedArr = arr.filter(function(element尸诽,index甥材,array){ 
  return element%2 == 0 
}); 
console.log(modifiedArr);
輸出:
[2,4,6]

正如您在上面的示例中所看到的,像map一樣性含,這里filter也使用三個參數(shù)洲赵。

我們必須為數(shù)組的每個元素返回一個布爾值。如果您不在末尾返回任何布爾值,則filter將其視為false并刪除該元素叠萍。

好吧..讓我們試試箭頭功能吧芝发。

let modifiedAarr = arr.filter((element,index)=> element%2 == 0)

希望你明白了苛谷。并且不要忘記注意辅鲸,只有第一個參數(shù)是強(qiáng)制性的。其他兩個參數(shù)是可選的腹殿。

數(shù)組降維

數(shù)組降維用于聚合數(shù)組的所有元素并返回單個值独悴。

讓我們看一些例子

let arr = [1,2,3,4,5,6] 
let total = arr.reduce(function(sum,element锣尉,index刻炒,array){ 
  return sum + element; 
},0); 
console.log(“total is”+ total);
輸出:
total is 21

與filter和map不同自沧,reduce使用具有四個參數(shù)的函數(shù)以及一個附加元素坟奥。在我們的例子中,它是0拇厢。

讓我們看看它是如何工作的爱谁。

帶四個參數(shù)的函數(shù)第一個參數(shù)是聚合器元素。它是所有元素總和孝偎,并且可以給定一個初始值管行。它的初始值被定義為附加元素。在我們的例子中邪媳,它是0捐顷。

然后第二個,第三個和第四個參數(shù)與filter和map相同雨效。

像filter和map一樣迅涮,您必須返回最終結(jié)果。

讓我們看另一個例子徽龟。

let arr = [1,2,3,4,5,6]; 
let totalSum = arr.reduce(function(sum叮姑,element,index据悔,array){ 
  console.log(sum +“+”+ element +“=”+ sum + element); 
  return sum + element; 
}传透,10); 
console.log(“Total sum is ”+ totalSum);
輸出:
10 + 1 = 11 
11 + 2 = 13 
13 + 3 = 16 
16 + 4 = 20 
20 + 5 = 25 
25 + 6 = 31 
Total sum is 31

希望你弄懂了這個例子。請注意极颓,我們將聚合器元素總和的初始值設(shè)置為10朱盐。

讓我們用箭頭函數(shù)編寫相同的代碼。

let totalSum = arr.reduce((sum菠隆,element)=> element + sum兵琳,0)

希望你明白了狂秘。這是直截了當(dāng)?shù)摹?/p>

與filter和map不同,前兩個參數(shù)是必需的躯肌。其他兩個是可選的者春。

這是jsfiddle, 去玩一玩。:)

模板文字

如果您知道其他腳本語言清女,如ruby钱烟,python,那么模板文字對您來說并不新鮮嫡丙。

它們是新的語法拴袭,可以輕松添加表達(dá)式。

模板文字用于執(zhí)行任何JS表達(dá)式迄沫。

讓我們看一些例子

let name = "Jon Snow";
let msg = `My name is ${name}`;
console.log(msg);
輸出:
My name is Jon Snow

簡單吧稻扬。

您還可以使用多行字符串卦方。

let msg = `My name
is ${name}`;
console.log(msg);
輸出:
My name
is Jon Snow

讓我們看看其他例子

let name = "Srebalaji";
let languages = () => {return "Ruby, Js, Java, Python"}
let msg = `My name is ${name}
My age is ${20+3}
And I code in ${languages()}`
輸出:
My name is Srebalaji
My age is 23
And I code in Ruby, Js, Java, Python

希望你明白了羊瘩。它直截了當(dāng)。

您可以輕松添加任何表達(dá)式以及多行字符串盼砍。

導(dǎo)入和導(dǎo)出

在ES6中導(dǎo)入和導(dǎo)出模塊是您將在現(xiàn)代前端庫中看到的有用功能之一尘吗。

我強(qiáng)烈建議您在此Plunk中使用此功能。環(huán)境已經(jīng)設(shè)置在那個plunk中浇坐。

好吧..那么導(dǎo)入和導(dǎo)出如何在ES6中發(fā)揮作用睬捶。

模塊中使用導(dǎo)出來顯式導(dǎo)出某些變量或函數(shù)或類。(即)如果導(dǎo)出變量近刘,則可以在其他模塊中使用擒贸。

導(dǎo)入用于從其他模塊導(dǎo)入變量,函數(shù)和類觉渴。

如果你沒弄明白我講的介劫。讓我們看一些例子。

app.js
export let name = "Jon"
export let age = 23
index.js
import {name, age} from './app'
console.log(name);
console.log(age);
index.html
<script src="./index.js"></script>
輸出:
Jon
23

在上面的例子中案淋,我們定義了兩個變量name和age并導(dǎo)出座韵。

在另一個文件中,我們導(dǎo)入了變量并訪問了它們的值踢京。

簡單吧誉碴。

讓我們深入一點

app.js
export default const name = "Jon"
index.js
import name from './app.js'
console.log(name);
輸出:
Jon

在上面的代碼中,您可以看到我們使用了新的關(guān)鍵字default瓣距。如果需要從模塊中導(dǎo)出單個值或函數(shù)或?qū)ο笄粒瑒t主要使用默認(rèn)值。并且模塊中只能有一個默認(rèn)值蹈丸。

關(guān)于默認(rèn)值的另一件事蹬屹。由于模塊中只有一個默認(rèn)值侣背,因此您可以在導(dǎo)入期間使用任何名稱來引用它。

import n from './app.js'
console.log(n);
輸出:
Jon

如您所見慨默,我們在此處將默認(rèn)值引用為n贩耐。

讓我們深入一點。

app.js
let a = 10;
let b = 2;
let sum = () => a+b;
export {a,b}
export default sum
index.js
import * as variables from './app'
import addition from './app' // default value
console.log(variables.a);
console.log(variables.b);
console.log(addition());
輸出:
10
2
12

在上面的例子中厦取,您可以看到我們已經(jīng)導(dǎo)出了兩個變量和一個函數(shù)潮太。我們使用*導(dǎo)入了所有變量。

導(dǎo)入時要記住兩件事虾攻。

1铡买、如果使用*來導(dǎo)入值,則必須使用別名(也就是)引用導(dǎo)入的所有的值霎箍。在我們的示例中奇钞,我們使用variables作為別名。

2漂坏、使用*導(dǎo)入值不會導(dǎo)入默認(rèn)值景埃。你必須單獨導(dǎo)入它。

import addition, * as variables from './app'

如果需要在一行中導(dǎo)入默認(rèn)值和其他值顶别,則可以使用上述語法谷徙。

希望你明白了。:)

解構(gòu)對象和數(shù)組

解構(gòu)是ES6中的一個有用功能驯绎。它使用起來非常簡單完慧。

讓我們舉個例子吧。

let person = {firstName: "Jon", lastName: "Snow", age: 23}
const {firstName, lastName, age} = person
console.log(firstName);
console.log(lastName);
console.log(age);
輸出:
Jon
Snow
23

在上面的代碼剩失,你可以看到對象person有多個鍵值對屈尼。

我們從對象本身創(chuàng)建了三個變量firstName,lastName拴孤,age(與對象鍵相同脾歧。)。

換句話說乞巧,我們從對象中提取鍵創(chuàng)建了三個變量涨椒。

讓我們看看其他一些例子

let person = {firstName: "Jon", lastName: "Snow", age: 23}
const {firstName} = person
console.log(firstName);
輸出:
Jon

在上面的示例中,您可以看到我們只從對象中提取了所需的值绽媒。

let person = {firstName: "Jon", lastName: "Snow", age: 23}
const {firstName: name, age} = person
console.log(name);
console.log(age);
輸出:
Jon
23

在上面的示例中蚕冬,您可以看到我們已經(jīng)定義了一個新的變量name,并使用firstName進(jìn)行了分配是辕。

希望你明白了囤热。這很簡單。

讓我們看看如何解構(gòu)數(shù)組获三。

let arr [1, 2, 3, 4]
const [a, b, c, d] = arr;
console.log(a);
console.log(b);
console.log(c);
console.log(d);
輸出:
1
2
3
4

希望你能明白上面的代碼旁蔼。這很簡單锨苏。

我們將數(shù)組的每個元素分配給變量。

讓我們看另一個例子棺聊。

let arr = [1,2,3,4,5,6]
let [a,b,,d,e] = arr
console.log(a);
console.log(b);
console.log(d);
console.log(e);
輸出:
1
2
4
5

在上面的代碼中伞租,您可以看到我們已經(jīng)跳過了數(shù)組的第三個元素。除此之外限佩,一切都與前面的例子相同葵诈。

讓我們看另一個例子。

let person = {firstName: "Jon", lastName: "Snow", age: 23}
let displayName = ({firstName, lastName:last}) => {
  console.log(`${firstName} - ${last}`);
}
displayName(person);
Output:
Jon - Snow

希望你明白了祟同。它直截了當(dāng)作喘。

Extend和Super

如果您有使用OOPS編碼的經(jīng)驗,那么Extend和Super對您來說并不新鮮晕城。

Extend用于從父類創(chuàng)建子類泞坦。子類繼承了父類的所有屬性,還可以修改父類的屬性砖顷。

class Person{
 constructor(firstName, lastName, age) {
   this.firstName = firstName;
   this.lastName = lastName;
   this.age = age;
 }
 displayName() {
  return `${this.firstName} - ${this.lastName}`;
 }
}
class Employee extends Person {
 constructor(firstName, lastName, age, salary) {
  super(firstName, lastName, age);
  this.salary = salary;
 }
 displaySalary() {
  return `${this.salary}`;
 }
 displayName() {
  return super.displayName();
 }
 displayAge() {
  return this.age;
 }
}
let manager = new Employee("Jon", "Snow", 23, 100);
console.log(manager.displaySalary());
console.log(manager.displayName());
console.log(manager.displayAge());
輸出:
100
Jon Snow
23

在上面的代碼中贰锁,您可以看到我們已經(jīng)使用構(gòu)造函數(shù)和簡單方法定義了一個Person類。

然后我們定義了另一個類Employee择吊,它是一個繼承自Person的子類李根。我們使用extend來實現(xiàn)這一目標(biāo)槽奕。希望你明白這一點几睛。

然后我們使用super關(guān)鍵字來調(diào)用父類的構(gòu)造函數(shù)。我們還使用super調(diào)用父類中聲明的方法粤攒。

注意:只有在調(diào)用super之后才能在子類中使用this所森。如果在子類中調(diào)用super之前使用this,則會得到RefrenceError夯接。

所以焕济,我們在上面的代碼中已經(jīng)完成了三件事

1、我們使用extends從父類創(chuàng)建一個子類盔几。
2晴弃、我們用super來調(diào)用父類的構(gòu)造函數(shù)。
3逊拍、我們使用super來調(diào)用父類中定義的方法上鞠。
希望你明白了:)

這是用來玩的jsfiddle

如果你喜歡這篇文章嘗試給一些鼓掌并分享它:) :)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芯丧,一起剝皮案震驚了整個濱河市芍阎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缨恒,老刑警劉巖谴咸,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件轮听,死亡現(xiàn)場離奇詭異,居然都是意外死亡岭佳,警方通過查閱死者的電腦和手機(jī)血巍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來珊随,“玉大人藻茂,你說我怎么就攤上這事∶悼遥” “怎么了辨赐?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長京办。 經(jīng)常有香客問我掀序,道長,這世上最難降的妖魔是什么惭婿? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任不恭,我火速辦了婚禮,結(jié)果婚禮上财饥,老公的妹妹穿的比我還像新娘换吧。我一直安慰自己,他們只是感情好钥星,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布沾瓦。 她就那樣靜靜地躺著,像睡著了一般谦炒。 火紅的嫁衣襯著肌膚如雪贯莺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天宁改,我揣著相機(jī)與錄音缕探,去河邊找鬼。 笑死还蹲,一個胖子當(dāng)著我的面吹牛爹耗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谜喊,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼潭兽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了锅论?” 一聲冷哼從身側(cè)響起讼溺,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎最易,沒想到半個月后怒坯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炫狱,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年剔猿,在試婚紗的時候發(fā)現(xiàn)自己被綠了视译。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡归敬,死狀恐怖酷含,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情汪茧,我是刑警寧澤椅亚,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站舱污,受9級特大地震影響呀舔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜扩灯,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一媚赖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧珠插,春花似錦惧磺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至布讹,卻和暖如春琳拭,著一層夾襖步出監(jiān)牢的瞬間训堆,已是汗流浹背描验。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留坑鱼,地道東北人膘流。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像鲁沥,于是被迫代替她去往敵國和親呼股。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

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