最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

把JavaScript代碼改成ES6語(yǔ)法不完全指南(分享)

 更新時(shí)間:2017年09月10日 08:34:46   作者:bergwhite  
下面小編就為大家?guī)?lái)一篇把JavaScript代碼改成ES6語(yǔ)法不完全指南(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就想給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

目錄

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

核心例子

文中的例子,請(qǐng)?jiān)谧钚碌腃hrome中測(cè)試。關(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)
 }
}

// 開(kāi)始考試
// 傳入的兩個(gè)回調(diào)函數(shù)分別處理結(jié)果
examStart(function(res) {
 console.log(res)
}, function(res) {
 console.log(res)
})

修改成靜態(tài)變量(const)或塊級(jí)變量(let)

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

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

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

開(kāi)始修改

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

疑問(wèn)解釋?zhuān)ㄖ貜?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

疑問(wèn)解釋?zhuān)╨et的塊級(jí)作用域是怎樣的)

// let定義的變量存在塊級(jí)作用域
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

疑問(wèn)解釋?zhuān)╟onst定義的變量在基礎(chǔ)數(shù)據(jù)類(lèi)型和引用類(lèi)型中的差異)

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

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

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

const arr = []
arr.push(1)
console.log(arr) // [1]

修改成Promise的形式

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

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

如果只有一個(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ù)常見(jiàn)于異步編程。比如發(fā)送Ajax請(qǐng)求和NodeJS中的異步文件操作。百聞不如一見(jiàn),我們看個(gè)最簡(jiǎn)單的例子吧。

// 定義一個(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對(duì)象
 // 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
})

開(kāi)始修改

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

const examStart2 = function() {
 // 返回一個(gè)Promise對(duì)象
 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è)用來(lái)幫我們簡(jiǎn)化函數(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ù)沒(méi)有獨(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"

開(kāi)始修改

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.

開(kāi)始修改

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)的對(duì)象

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

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

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

修改成Class

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

在React中,模板的定義,通常是類(lèi),生命周期方法也是寫(xiě)在類(lèi)中。

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

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

以上這篇把JavaScript代碼改成ES6語(yǔ)法不完全指南(分享)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 工作中比較實(shí)用的JavaScript驗(yàn)證和數(shù)據(jù)處理的干貨(經(jīng)典)

    工作中比較實(shí)用的JavaScript驗(yàn)證和數(shù)據(jù)處理的干貨(經(jīng)典)

    工作中比較實(shí)用的JavaScript驗(yàn)證和數(shù)據(jù)處理知識(shí)經(jīng)常會(huì)用到,下面小編通過(guò)查閱相關(guān)資料及日常記錄的知識(shí)分享到腳本之家平臺(tái),供大家參考
    2016-08-08
  • JavaScript實(shí)現(xiàn)的原生態(tài)兼容IE6可調(diào)可控滾動(dòng)文字功能詳解

    JavaScript實(shí)現(xiàn)的原生態(tài)兼容IE6可調(diào)可控滾動(dòng)文字功能詳解

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)的原生態(tài)兼容IE6可調(diào)可控滾動(dòng)文字功能,簡(jiǎn)單說(shuō)明了文字滾動(dòng)的實(shí)現(xiàn)原理并結(jié)合具體實(shí)例形式給出了javascript文字滾動(dòng)功能的具體實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2017-09-09
  • 限制textbox或textarea輸入字符長(zhǎng)度的JS代碼

    限制textbox或textarea輸入字符長(zhǎng)度的JS代碼

    textbox或textarea的輸入字符限制有很多方法,在本將為大家詳細(xì)介紹下js中時(shí)如何實(shí)現(xiàn)的,感興趣的朋友不要錯(cuò)過(guò)
    2013-10-10
  • 分享JavaScript監(jiān)聽(tīng)全部Ajax請(qǐng)求事件的方法

    分享JavaScript監(jiān)聽(tīng)全部Ajax請(qǐng)求事件的方法

    最近在做一個(gè)小項(xiàng)目,引入了第三方j(luò)s文件,這個(gè)文件會(huì)調(diào)用XMLHttpRequest向服務(wù)器發(fā)送 Ajax請(qǐng)求,但是我有需要監(jiān)聽(tīng)其Ajax請(qǐng)求的某些事件,以便額外地執(zhí)行其他腳本。于是稍微看了看監(jiān)聽(tīng) Ajax請(qǐng)求的事件方法,在這里分享給大家。有需要的朋友們可以參考借鑒。
    2016-08-08
  • JavaScript常用數(shù)組元素搜索或過(guò)濾的四種方法詳解

    JavaScript常用數(shù)組元素搜索或過(guò)濾的四種方法詳解

    這篇文章主要介紹了JavaScript常用數(shù)組元素搜索或過(guò)濾的四種方法,每種方式通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • 利用javascript實(shí)現(xiàn)禁用網(wǎng)頁(yè)上所有文本框,下拉菜單,多行文本域

    利用javascript實(shí)現(xiàn)禁用網(wǎng)頁(yè)上所有文本框,下拉菜單,多行文本域

    這篇文章主要介紹了利用javascript實(shí)現(xiàn)禁用網(wǎng)頁(yè)上所有文本框,下拉菜單,多行文本域。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-12-12
  • 原生js輪播特效

    原生js輪播特效

    這篇文章主要為大家詳細(xì)介紹了原生js輪播特效,簡(jiǎn)單實(shí)用的代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 淺談javascript函數(shù)劫持[轉(zhuǎn)自xfocus]

    淺談javascript函數(shù)劫持[轉(zhuǎn)自xfocus]

    javascript函數(shù)劫持,也就是老外提到的javascript hijacking技術(shù)。最早還是和劍心同學(xué)討論問(wèn)題時(shí)偶然看到的一段代碼
    2008-02-02
  • Web技術(shù)實(shí)現(xiàn)移動(dòng)監(jiān)測(cè)的介紹

    Web技術(shù)實(shí)現(xiàn)移動(dòng)監(jiān)測(cè)的介紹

    移動(dòng)偵測(cè),一般也叫運(yùn)動(dòng)檢測(cè),常用于無(wú)人值守監(jiān)控錄像和自動(dòng)報(bào)警。通過(guò)攝像頭按照不同幀率采集得到的圖像會(huì)被 CPU 按照一定算法進(jìn)行計(jì)算和比較,當(dāng)畫(huà)面有變化時(shí),如有人走過(guò),鏡頭被移動(dòng),計(jì)算比較結(jié)果得出的數(shù)字會(huì)超過(guò)閾值并指示系統(tǒng)能自動(dòng)作出相應(yīng)的處理
    2017-09-09
  • Webpack完整打包流程實(shí)現(xiàn)

    Webpack完整打包流程實(shí)現(xiàn)

    Webpack是當(dāng)下流行的JavaScript靜態(tài)模塊打包器,它能夠處理應(yīng)用中的所有資源文件,并將其打包成瀏覽器兼容的文件,本文就來(lái)介紹一下Webpack完整打包流程實(shí)現(xiàn),感興趣的可以了解一下
    2024-09-09

最新評(píng)論

东台市| 沧州市| 乐山市| 德江县| 昆明市| 东台市| 丰原市| 洛隆县| 牡丹江市| 香港 | 奉节县| 蕲春县| 梨树县| 泸州市| 平安县| 洞头县| 洛宁县| 盐边县| 通州区| 调兵山市| 韩城市| 银川市| 乐安县| 屯昌县| 琼海市| 普宁市| 中西区| 射阳县| 泰和县| 友谊县| 霍州市| 铁岭县| 安达市| 凉山| 财经| 营口市| 辉南县| 密云县| 宜宾县| 资溪县| 白山市|