摘要:這也是前端面試經(jīng)常詢問的問題,經(jīng)常問你出現(xiàn)了哪些新的特性,平時又使用過那些。
這也是前端面試經(jīng)常詢問的問題,經(jīng)常問你es6出現(xiàn)了哪些新的特性,平時又使用過那些。在編寫此教程的時候,第一句話往往就是面試常常問到的地方,然后后面就是他的詳細(xì)解釋,面試要求的內(nèi)容我會用*標(biāo)記出來。寫技術(shù)文檔是真的累啊,雖然是看別人的文檔,但是你得看很多,而且還得自己總結(jié)啊。所以說要是覺得對你有用還是幫我點(diǎn)個star吧https://github.com/skychenbo
1、箭頭函數(shù)需要注意的地方 2、ES6 let、const 3、set數(shù)據(jù)結(jié)構(gòu) 4、promise對象的用法,手寫一個promise 5、class的理解 6、模版語法的理解 7、rest參數(shù) 8、 module體系箭頭函數(shù)需要注意的地方
*當(dāng)要求動態(tài)上下文的時候,就不能夠使用箭頭函數(shù)。也就是this的固定化
1、在使用=>定義函數(shù)的時候,this的指向是定義時所在的對象,而不是使用時所在的對象
2、不能夠用作構(gòu)造函數(shù),這就是說,不能夠使用new命令,否則就會拋出一個錯誤
3、不能夠使用arguments對象
4、不能使用yield命令
這是一道當(dāng)年很困惑我的一道題不知道你在第一眼能不能看出其結(jié)果,this的指向總是讓人困擾,但是有了=>以后媽媽再也不用擔(dān)心你使用this了
class Animal { constructor(){ this.type = "animal" } says(say) { setTimeout(function () { console.log(this.type + "says" + say) },1000) } } var animal = new Animal() animal.says("hi") // undefined says hi
我們再來看看=>的情況
class Animal() { constructor() { this.type = "animal" } says(say) { setTimeout(() => { console.log(this.type + " says " + say) }, 1000) } } var animal = new Animal() animal.says("hi") // animal says hi
ES6 let、const
*let是更完美的var,不是全局變量,具有塊級函數(shù)作用域,大多數(shù)情況不會發(fā)生變量提升。const定義常量值,不能夠重新賦值,如果值是一個對象,可以改變對象里邊的屬性值
let
1、let聲明的變量具有塊級作用域
2、let聲明的變量不能通過window.變量名進(jìn)行訪問
3、形如for(let x..)的循環(huán)是每次迭代都為x創(chuàng)建新的綁定
下面是var帶來的不合理場景
var a = [] for (var i = 0; i < i; i++) { a[i] = function () { console.log(i) } } a[5]() // 10
在上述代碼中,變量i是var聲明的,在全局范圍類都有效。所以每一次循環(huán),新的i值都會覆蓋舊值,導(dǎo)致最后輸出都是10
而如果對循環(huán)使用let語句的情況,那么每次迭代都是為x創(chuàng)建新的綁定代碼如下
var a = [] for (let i = 0; i < i; i++) { a[i] = function () { console.log(i) } } a[5]() // 5
當(dāng)然除了這種方式讓數(shù)組中的各個元素分別是不同的函數(shù),我們還可以采用閉包和立即函數(shù)兩種方法
這是閉包的方法
function showNum(i) { return function () { console.log(i) } } var a = [] for (var i = 0; i < 5; i++) { a[i] = showNum(i) }
這是立即函數(shù)的方法
var a = [] for (var i = 0; i < 5; i++) { a[i] = (function (i) { return function () { console.log(i) } })(i) } a[2]()Set數(shù)據(jù)結(jié)構(gòu)
*es6方法,Set本身是一個構(gòu)造函數(shù),它類似于數(shù)組,但是成員值都是唯一的
const set = new Set([1,2,3,4,4]) [...set] // [1,2,3,4] Array.from(new Set())是將set進(jìn)行去重promise對象的用法,手寫一個promise
promise是一個構(gòu)造函數(shù),下面是一個簡單實(shí)例
var promise = new Promise((resolve,reject) => { if (操作成功) { resolve(value) } else { reject(error) } }) promise.then(function (value) { // success },function (value) { // failure })Class的講解
*class語法相對原型、構(gòu)造函數(shù)、繼承更接近傳統(tǒng)語法,它的寫法能夠讓對象原型的寫法更加清晰、面向?qū)ο缶幊痰恼Z法更加通俗
這是class的具體用法
class Animal { constructor () { this.type = "animal" } says(say) { console.log(this.type + "says" + say) } } let animal = new Animal() animal.says("hello") // animal says hello class Cat extends Animal { constructor() { super() this.type = "cat" } } let cat = new Cat() cat.says("hello") // cat says hello
可以看出在使用extend的時候結(jié)構(gòu)輸出是cat says hello 而不是animal says hello。說明contructor內(nèi)部定義的方法和屬性是實(shí)例對象自己的,不能通過extends 進(jìn)行繼承。在class cat中出現(xiàn)了super(),這是什么呢
在ES6中,子類的構(gòu)造函數(shù)必須含有super函數(shù),super表示的是調(diào)用父類的構(gòu)造函數(shù),雖然是父類的構(gòu)造函數(shù),但是this指向的卻是cat
Object.assign 方法
var n = Object.assign(a,b,c)向n中添加a,b,c的屬性
模版語法*就是這種形式${varible},在以往的時候我們在連接字符串和變量的時候需要使用這種方式"string" + varible + "string"但是有了模版語言后我們可以使用string${varible}string這種進(jìn)行連接
rest參數(shù)*es6引入rest參數(shù),用于獲取函數(shù)的多余參數(shù),這樣就不需要使用arguments對象了
ex:
function add(...values) { let sum = 0 for(var val of values) { sum += val } return sum }module體系
*歷史上js是沒有module體系,無法將一個大程序拆分成一些小的程序。在es6之前,有commonJs,AMD兩種
CommonJS是如何書寫的呢
const animal = require("./content.js") // content.js module.exports = "a cat"
require.js是這樣做的
// content.js
define("content.js", function () { return "A cat" }) require(["./content.js"], function (animal) { console.log(animal) // a cat })
ES6的語法(在我用的vue中,就使用的是這個)
import animal from "./content" // content.js export default "a cat"
es6 import的其他用法
在vue中可以 import animal from "./content"
animal這個值可以根據(jù)你的喜歡而改變,但是有一個問題就是如果一旦引入的是函數(shù)或者變量時,你就必須和content中的名字保持一致,可以參照
import { say, type } from "./content"
常用的還有一種寫法
import * as content from "./content"
這種寫法就是表示所有的輸出值都在這個對象上
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/51295.html
摘要:這也是前端面試經(jīng)常詢問的問題,經(jīng)常問你出現(xiàn)了哪些新的特性,平時又使用過那些。 這也是前端面試經(jīng)常詢問的問題,經(jīng)常問你es6出現(xiàn)了哪些新的特性,平時又使用過那些。在編寫此教程的時候,第一句話往往就是面試常常問到的地方,然后后面就是他的詳細(xì)解釋,面試要求的內(nèi)容我會用*標(biāo)記出來。寫技術(shù)文檔是真的累啊,雖然是看別人的文檔,但是你得看很多,而且還得自己總結(jié)啊。所以說要是覺得對你有用還是幫我點(diǎn)個s...
摘要:從現(xiàn)在開始,養(yǎng)成寫技術(shù)博客的習(xí)慣,或許可以在你的職業(yè)生涯發(fā)揮著不可忽略的作用。如果想了解更多優(yōu)秀的前端資料,建議收藏下前端英文網(wǎng)站匯總這個網(wǎng)站,收錄了國外一些優(yōu)質(zhì)的博客及其視頻資料。 前言 寫文章是一個短期收益少,長期收益很大的一件事情,人們總是高估短期收益,低估長期收益。往往是很多人堅(jiān)持不下來,特別是寫文章的初期,剛寫完文章沒有人閱讀會有一種挫敗感,影響了后期創(chuàng)作。 從某種意義上說,...
摘要:從現(xiàn)在開始,養(yǎng)成寫技術(shù)博客的習(xí)慣,或許可以在你的職業(yè)生涯發(fā)揮著不可忽略的作用。如果想了解更多優(yōu)秀的前端資料,建議收藏下前端英文網(wǎng)站匯總這個網(wǎng)站,收錄了國外一些優(yōu)質(zhì)的博客及其視頻資料。 前言 寫文章是一個短期收益少,長期收益很大的一件事情,人們總是高估短期收益,低估長期收益。往往是很多人堅(jiān)持不下來,特別是寫文章的初期,剛寫完文章沒有人閱讀會有一種挫敗感,影響了后期創(chuàng)作。 從某種意義上說,...
摘要:特意對前端學(xué)習(xí)資源做一個匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對前端學(xué)習(xí)資源做一個匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點(diǎn)多,可以很快搞定,沒想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯誤的地方,還請斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會及時更新,平時業(yè)務(wù)工作時也會不定期更...
閱讀 3514·2023-04-25 17:35
閱讀 2588·2021-11-24 09:39
閱讀 2525·2021-10-18 13:32
閱讀 3409·2021-10-11 10:58
閱讀 1630·2021-09-26 09:55
閱讀 6134·2021-09-22 15:47
閱讀 959·2021-08-26 14:15
閱讀 3467·2019-08-30 15:55