亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

把JavaScript代碼改成ES6語法不完全指南

ninefive / 2772人閱讀

摘要:無論是靜態(tài)變量還是塊級變量,都不能重復(fù)定義,否則會(huì)報(bào)錯(cuò)。當(dāng)存在多個(gè)嵌套的回調(diào)函數(shù)時(shí),代碼的縮進(jìn)層級將會(huì)非常多,不利于閱讀。如果只有一個(gè)回調(diào)函數(shù),不涉及到錯(cuò)誤處理,則不建議修改為的形式?;卣{(diào)函數(shù)常見于異步編程。

目錄
* 核心例子
* 修改成靜態(tài)變量(const)或塊級變量(let)
    * 開始修改
    * 疑問解釋(重復(fù)定義會(huì)發(fā)生什么)
    * 疑問解釋(let的塊級作用域是怎樣的)
    * 疑問解釋(const定義的變量在基礎(chǔ)數(shù)據(jù)類型和引用類型中的差異)
* 修改成Promise的形式
    * 預(yù)備知識(shí)(回調(diào)函數(shù)是什么)
    * 預(yù)備知識(shí)(如何把回調(diào)函數(shù)改為Promise)
    * 開始修改
* 修改成箭頭函數(shù)(Arrow Function)
    * 預(yù)備知識(shí)(箭頭函數(shù)是什么)
    * 預(yù)備知識(shí)(箭頭函數(shù)函數(shù)中的this是個(gè)坑)
    * 開始修改
* 修改拼接字符串成模板字符串
    * 預(yù)備知識(shí)(字符串的拼接方式)
    * 預(yù)備知識(shí)(改為模板字符串的方式)
    * 開始修改
* 修改成解構(gòu)的對象
* 修改成Class
核心例子

文中的例子,請?jiān)谧钚碌腃hrome中測試。關(guān)于配置ES6轉(zhuǎn)ES5的環(huán)境,不在本文探討的范疇。

// 定義一個(gè)學(xué)生構(gòu)造函數(shù)
var People = function(name, age) {
  this.name = name
  this.age = age
}

// 創(chuàng)建小明實(shí)例
var xiaoming = new People("xiaoming", 18)

// 定義一個(gè)考試函數(shù)
// 定義兩個(gè)回調(diào)函數(shù),在適當(dāng)?shù)臅r(shí)候把參數(shù)傳進(jìn)去
var examStart = function(callbackSucc, callbackFail) {
  var result = prompt("1+5=")
  if(result === "6") {
    callbackSucc("Awesome. Your answer is " + result)
  }
  else {
    callbackFail("You can try again. Your answer is " + result)
  }
}

// 開始考試
// 傳入的兩個(gè)回調(diào)函數(shù)分別處理結(jié)果
examStart(function(res) {
  console.log(res)
}, function(res) {
  console.log(res)
})
修改成靜態(tài)變量(const)或塊級變量(let)

當(dāng)你變量的值需要修改的時(shí)候,應(yīng)該使用塊級變量(let)。其他時(shí)候,使用靜態(tài)變量(const)。

無論是靜態(tài)變量(const)還是塊級變量(let),都不能重復(fù)定義,否則會(huì)報(bào)錯(cuò)。

靜態(tài)變量(const)一旦定義,數(shù)據(jù)類型不可更改。但是引用類型,如Array,Object,都可以用相應(yīng)的原型方法對數(shù)據(jù)的內(nèi)部進(jìn)行操作。

開始修改

我們這里定義的變量都不需要修改,所以直接全部改為const。在項(xiàng)目中,判斷是改為const還是let有一個(gè)技巧,可以使用編輯器的變量復(fù)選功能(如,sublime中是雙擊變量名之后ctrl+d)。然后判斷代碼中是否對這個(gè)變量進(jìn)行過賦值,以及根據(jù)自己的判斷是否需要對這個(gè)變量進(jìn)行修改,不需要?jiǎng)t用const。

// 修改一  var ==> const
const Student1 = function(name, age) {
  this.name = name
  this.age = age
}

// 修改二  var ==> const
const xiaoming1 = new Student1("xiaoming", 18)

// 修改三  var ==> const
const examStart1 = function(callbackSucc, callbackFail) {
  // 修改四  var ==> const
  const result = prompt("1+5=")
  if(result === "6") {
    callbackSucc("Awesome. Your answer is " + result)
  }
  else {
    callbackFail("You can try again. Your answer is " + result)
  }
}

examStart1(function(res) {
  console.log(res)
}, function(res) {
  console.log(res)
})
疑問解釋(重復(fù)定義會(huì)發(fā)生什么)
const author = "bw2"
const author = "bw3"  // Uncaught SyntaxError: Identifier "author" has already been declared
let author = "bw4"  // Uncaught SyntaxError: Identifier "author" has already been declared
疑問解釋(let的塊級作用域是怎樣的)
// let定義的變量存在塊級作用域
if(true) {
  let test1 = 2333
}
console.log(test1)  // Uncaught ReferenceError: t is not defined


// var定義的變量不存在,會(huì)直接成為全局變量
if(true) {
  var test2 = 2333
}
console.log(test2)  // 2333
疑問解釋(const定義的變量在基礎(chǔ)數(shù)據(jù)類型和引用類型中的差異)

開始例子之前,先回顧以下基礎(chǔ)數(shù)據(jù)類型。Number、String、Boolean、null、undefined、Symbol。其中Symbol是ES6新加的。除基礎(chǔ)數(shù)據(jù)類型外,皆為引用類型。常見的引用類型是Array,Object。

// const定義的變量值是基礎(chǔ)數(shù)據(jù)類型時(shí),不能修改值,也不能修改類型
const num = 2333
num = 2334  // Uncaught TypeError: Assignment to constant variable.
num = ""  // Uncaught TypeError: Assignment to constant variable.

// const定義的變量值是引用類型時(shí),可以修改值
const obj = {}
obj.test = 2333
console.log(obj.test)  // 2333

const arr = []
arr.push(1)
console.log(arr)  // [1]
修改成Promise的形式

從應(yīng)用的角度上來講,Promise的主要作用是可以把回調(diào)函數(shù),改為鏈?zhǔn)秸{(diào)用的模式。

當(dāng)存在多個(gè)嵌套的回調(diào)函數(shù)時(shí),代碼的縮進(jìn)層級將會(huì)非常多,不利于閱讀。這時(shí)Promise就登場了。

如果只有一個(gè)回調(diào)函數(shù),不涉及到錯(cuò)誤處理,則不建議修改為Promise的形式。

預(yù)備知識(shí)(回調(diào)函數(shù)是什么)

回調(diào)函數(shù)是指,定義一個(gè)函數(shù),傳入的參數(shù)是一個(gè)函數(shù)。然后在函數(shù)中特定的位置,執(zhí)行這個(gè)傳入的函數(shù),并將需要用到的數(shù)據(jù),作為參數(shù)傳入?;卣{(diào)函數(shù)常見于異步編程。比如發(fā)送Ajax請求和NodeJS中的異步文件操作。百聞不如一見,我們看個(gè)最簡單的例子吧。

// 定義一個(gè)支持傳入回調(diào)函數(shù)的函數(shù)
function fun1(callback) {
  // 執(zhí)行傳入的函數(shù),并將值2333作為參數(shù)傳入
  callback(2333)
}

// 執(zhí)行定義的函數(shù)
fun1(function(res){
  // 輸出傳入的參數(shù)
  console.log(res)
})
預(yù)備知識(shí)(如何把回調(diào)函數(shù)改為Promise)

這里只是為了舉個(gè)例子,不涉及錯(cuò)誤處理的時(shí)候,不建議修改為Promise。

function fun2() {
  // 在函數(shù)中返回一個(gè)Promise對象
  // resolve和reject都是函數(shù)
  return new Promise(function(resolve, reject){
    // resolve函數(shù)中的參數(shù)將會(huì)出現(xiàn)在.then方法中
    // reject函數(shù)中的參數(shù)將會(huì)出現(xiàn)在.ctch方法中
    resolve(2333)
  })
}

fun2().then(function(res){
  console.log(res)  // 2333
})
開始修改

Promise是通過resolve和reject來分別把正確結(jié)果,和錯(cuò)誤提示放在鏈?zhǔn)秸{(diào)用的.then和.catch方法里。

const examStart2 = function() {
  // 返回一個(gè)Promise對象
  return new Promise(function(resolve, reject) {
    var result = prompt("1+5=")
    if(result === "6") {
      resolve("Awesome. Your answer is " + result)
    }
    else {
      reject("You can try again. Your answer is " + result)
    }
  })
}
examStart2()
.then(function(res) {
  console.log(res)
})
.catch(function(err) {
  console.log(err)
})
修改成箭頭函數(shù)(Arrow Function) 預(yù)備知識(shí)(箭頭函數(shù)是什么)

箭頭函數(shù)是一個(gè)用來幫我們簡化函數(shù)結(jié)構(gòu)的一個(gè)小工具。

// 普通函數(shù)形式
const add1 = function(a, b) {
   return a + b
}
add1(1, 2)  // 3

// 箭頭函數(shù)形式
const add2 = (a, b) => a + b
add2(1, 2)  // 3
預(yù)備知識(shí)(箭頭函數(shù)函數(shù)中的this是個(gè)坑)
// 箭頭函數(shù)沒有獨(dú)立的this作用域
const obj1 = {
  name: "bw2",
  showName: () => {
    return this.name
  }
}
obj1.showName()  // ""

// 解決方案:改為function模式
const obj2 = {
  name: "bw2",
  showName: function() {
    return this.name
  }
}
obj2.showName()  // "bw2"
開始修改
var examStart3 = function() {
  // 修改一
  return new Promise((resolve, reject) => {
    var result = prompt("1+5=")
    if(result === "6") {
      resolve("Awesome. Your answer is " + result)
    }
    else {
      reject("You can try again. Your answer is " + result)
    }
  })
}
// 修改二
examStart3().then((res) => console.log(res)).catch((err) => console.log(err))
修改拼接字符串成模板字符串 預(yù)備知識(shí)(字符串的拼接方式)
const xh1 = "xiaohong"
console.log("I"m " + xh1 + ".")  // I"m xiaohong.
預(yù)備知識(shí)(改為模板字符串的方式)

字符串模板使用的不再是單引號(hào)了,是在英文輸入狀態(tài)下的`鍵(ESC下面那個(gè))。

const xh2 = "xiaohong"
console.log(`I"m ${xh2}.`)  // I"m xiaohong.
開始修改
var examStart4 = function() {
  return new Promise((resolve, reject) => {
    var result = prompt("1+5=")
    if(result === "6") {
      // 修改一
      resolve(`Awesome. Your answer is ${result}`)
    }
    else {
      // 修改二
      reject(`You can try again. Your answer is ${result}`)
    }
  })
}
examStart4().then((res) => console.log(res)).catch((err) => console.log(err))
修改成解構(gòu)的對象

對象解構(gòu)常用在NodeJS導(dǎo)入包內(nèi)的某個(gè)模塊時(shí)。對于自己寫的對象,如果需要進(jìn)行解構(gòu),則要確保對象內(nèi)的命名被解構(gòu)出來不會(huì)造成沖突。這里是為了舉例子方便,沒有使用很獨(dú)特的命名。

const People2 = function(name, age) {
  this.name = name
  this.age = age
}
const xiaoming2 = new People2("xiaoming2", 18)

// 開始結(jié)構(gòu)
const {name, age} = xiaoming2
// 現(xiàn)在可以獨(dú)立訪問了
console.log(name)  // xiaoming2
console.log(age)  // 18
修改成Class

類是一個(gè)語法糖,但是這并不妨礙我們?nèi)ナ秤盟?/p>

在React中,模板的定義,通常是類,生命周期方法也是寫在類中。

class People3 {
  constructor(name, age){
    this.name = name
    this.age = age
  }
  showName() {
    return this.name
  }
}

const xiaoming3 = new People3("xiaoming3", 18)
console.log(xiaoming3)  // People {name: "xiaoming3", age: 18}
console.log(xiaoming3.showName())  // xiaoming3

不過癮?文章已經(jīng)結(jié)束了。但是關(guān)于ES6的探索,還會(huì)繼續(xù)保存更新。

來關(guān)注一下前端進(jìn)階指南微信公眾號(hào)吧:

另外我也創(chuàng)了一個(gè)對應(yīng)的QQ群:660112451,歡迎一起交流。

注:以上ES6語法為作者日常使用較為頻繁的語法,未將所有ES6語法囊括在內(nèi)。感謝你的閱讀。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/88469.html

相關(guān)文章

  • 前端練級攻略(第二部分)

    摘要:是文檔的一種表示結(jié)構(gòu)。這些任務(wù)大部分都是基于它。這個(gè)實(shí)踐的重點(diǎn)是把你在前端練級攻略第部分中學(xué)到的一些東西和結(jié)合起來。一旦你進(jìn)入框架部分,你將更好地理解并使用它們。到目前為止,你一直在使用進(jìn)行操作。它是在前端系統(tǒng)像今天這樣復(fù)雜之前編寫的。 本文是 前端練級攻略 第二部分,第一部分請看下面: 前端練級攻略(第一部分) 在第二部分,我們將重點(diǎn)學(xué)習(xí) JavaScript 作為一種獨(dú)立的語言,如...

    BWrong 評論0 收藏0
  • [譯]JavaScript ES6箭頭函數(shù)指南

    摘要:以下例子的目的是使用來展示一個(gè)每秒都會(huì)更新的時(shí)鐘當(dāng)嘗試在的回調(diào)中使用來引用元素時(shí),很不幸,我們得到的只是一個(gè)屬于回調(diào)函數(shù)自身上下文的。 前言 胖箭頭函數(shù)(Fat arrow functions),又稱箭頭函數(shù),是一個(gè)來自ECMAScript 2015(又稱ES6)的全新特性。有傳聞?wù)f,箭頭函數(shù)的語法=>,是受到了CoffeeScript 的影響,并且它與CoffeeScript中的=>...

    makeFoxPlay 評論0 收藏0
  • [譯]JavaScript ES6 class指南

    摘要:前言又稱通過一些新的關(guān)鍵字,使類成為了中一個(gè)新的一等公民。類聲明在中,有兩個(gè)聲明類的方式。在使用了新的關(guān)鍵字后在底層,所做的,也只是將這個(gè)方法添加為構(gòu)造函數(shù)的一個(gè)屬性。在想要調(diào)用父類的構(gòu)造函數(shù)時(shí),你可以簡單地將關(guān)鍵字視作一個(gè)函數(shù)使用,如。 前言 EcmaScript 2015 (又稱ES6)通過一些新的關(guān)鍵字,使類成為了JS中一個(gè)新的一等公民。但是目前為止,這些關(guān)于類的新關(guān)鍵字僅僅是建...

    CoderDock 評論0 收藏0
  • 前端資源系列(4)-前端學(xué)習(xí)資源分享&前端面試資源匯總

    摘要:特意對前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點(diǎn)多,可以很快搞定,沒想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯(cuò)誤的地方,還請斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會(huì)及時(shí)更新,平時(shí)業(yè)務(wù)工作時(shí)也會(huì)不定期更...

    princekin 評論0 收藏0
  • 【譯】前端練級攻略

    摘要:由于系統(tǒng)變得越來越復(fù)雜,人們提出了稱為預(yù)處理器和后處理器的工具來管理復(fù)雜性。后處理器在由預(yù)處理器手寫或編譯后對應(yīng)用更改。我之前建議的文章,,也涵蓋了預(yù)處理器相關(guān)的知識(shí)。 譯者:前端小智 原文:medium.freecodecamp.org/from-zero-t… medium.freecodecamp.org/from-zero-t… 我記得我剛開始學(xué)習(xí)前端開發(fā)的時(shí)候。我看到了很多文章及...

    wuyumin 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<