ES6面試 複習乾貨知識點彙總(全)

2021-10-24 08:34:45 字數 4075 閱讀 9519

尤其在物件解構賦值(見優化部分b.)或者模組輸出變數時,這種寫法的好處體現的最為明顯:

let  = object;

let myownmethods = ; // let myownmethods =

可以看到屬性變數式宣告屬性看起來更加簡潔明瞭。方法也可以採用簡潔寫法:

let es5fun = 

}; let es6fun =

}

// otherfruits

// 注意: 物件的擴充套件運算子用在解構賦值時,擴充套件運算子只能用在最有乙個引數(otherfruits後面不能再跟其他引數)

let morefruits = ;

d. super 關鍵字。es6在class類裡新增了類似this的關鍵字super。同this總是指向當前函式所在的物件不同,super關鍵字總是指向當前函式所在物件的原型物件。

2、公升級部分:

a. es6在object原型上新增了is()方法,做兩個目標物件的相等比較,用來完善』=『方法。』='方法中nan === nan //false其實是不合理的,object.is修復了這個小bug。(object.is(nan, nan) // true)

b. es6在object原型上新增了assign()方法,用於物件新增屬性或者多個物件合併。

const target = ;

const source1 = ;

const source2 = ;

object.assign(target, source1, source2);

target //

注意: assign合併的物件target只能合併source1、source2中的自身屬性,並不會合併source1、source2中的繼承屬性,也不會合併不可列舉的屬性,且無法正確複製get和set屬性(會直接執行get/set函式,取return的值)。

c. es6在object原型上新增了getownpropertydescriptors()方法,此方法增強了es5中getownpropertydescriptor()方法,可以獲取指定物件所有自身屬性的描述物件。結合defineproperties()方法,可以完美複製物件,包括複製get和set屬性。

d. es6在object原型上新增了getprototypeof()和setprototypeof()方法,用來獲取或設定當前物件的prototype物件。這個方法存在的意義在於,es5中獲取設定prototype對像是通過__proto__屬性來實現的,然而__proto__屬性並不是es規範中的明文規定的屬性,只是瀏覽器各大產商「私自」加上去的屬性,只不過因為適用範圍廣而被預設使用了,再非瀏覽器環境中並不一定就可以使用,所以為了穩妥起見,獲取或設定當前物件的prototype物件時,都應該採用es6新增的標準用法。

d. es6在object原型上還新增了object.keys(),object.values(),object.entries()方法,用來獲取物件的所有鍵、所有值和所有鍵值對陣列。

九、問:舉一些es6對function函式型別做的常用公升級優化?(重要)

答:1、優化部分:

a. 箭頭函式(核心)。箭頭函式是es6核心的公升級項之一,箭頭函式裡沒有自己的this,這改變了以往js函式中最讓人難以理解的this執行機制。主要優化點:

ⅰ. 箭頭函式內的this指向的是函式定義時所在的物件,而不是函式執行時所在的物件。es5函式裡的this總是指向函式執行時所在的物件,這使得在很多情況下this的指向變得很難理解,尤其是非嚴格模式情況下,this有時候會指向全域性物件,這甚至也可以歸結為語言層面的bug之一。es6的箭頭函式優化了這一點,它的內部沒有自己的this,這也就導致了this總是指向上一層的this,如果上一層還是箭頭函式,則繼續向上指,直到指向到有自己this的函式為止,並作為自己的this。

ⅱ. 箭頭函式不能用作建構函式,因為它沒有自己的this,無法例項化。

ⅲ. 也是因為箭頭函式沒有自己的this,所以箭頭函式 內也不存在arguments物件。(可以用擴充套件運算子代替)

b. 函式預設賦值。es6之前,函式的形參是無法給預設值得,只能在函式內部通過變通方法實現。es6以更簡潔更明確的方式進行函式預設賦值。

function es6fuc (x, y = 'default') 

es6fuc(4) // 4, default

foo::bar;

// 等同於

bar.bind(foo);

foo::bar(...arguments);

// 等同於

function createmyownobj() , 運氣不錯,成功了`;

resolve(message);

} else 運氣不行,失敗了`;

reject(message);

}}, 1000);

});} });

}let myownobj = createmyownobj();

myownobj.hahaha.then(result => ).catch(error => )

myownobj.wuwuwu.then(result => ).catch(error => )

//obj就是可遍歷的,因為它遵循了iterator標準,且包含[symbol.iterator]方法,方法函式也符合標準的iterator介面規範。

//obj.[symbol.iterator]() 就是iterator遍歷器

let obj = ;

} else ;}}

};}};

es6給set、map、array、string都加上了[symbol.iterator]方法,且[symbol.iterator]方法函式也符合標準的iterator介面規範,所以set、map、array、string預設都是可以遍歷的。

//array

let array = ['red', 'green', 'blue'];

array[symbol.iterator]() //iterator遍歷器

array[symbol.iterator]().next() //

//string

let string = '1122334455';

string[symbol.iterator]() //iterator遍歷器

string[symbol.iterator]().next() //

//set

let set = new set(['red', 'green', 'blue']);

set[symbol.iterator]() //iterator遍歷器

set[symbol.iterator]().next() //

//map

let map = new map();

let obj= ;

map.set(obj, 'mapvalue');

map[symbol.iterator]().next()

///es5

function es5fun (x, y)

es5fun.prototype.tostring = function ()

var p = new es5fun(1, 3);

p.tostring();

object.keys(es5fun.prototype); //['tostring']

//es6

class es6fun

tostring ()

}object.keys(es6fun.prototype); //

b.es6的class類必須用new命令操作,而es5的建構函式不用new也可以執行。

c.es6的class類不存在變數提公升,必須先定義class之後才能例項化,不像es5中可以將建構函式寫在例項化之後。

d.es5 的繼承,實質是先創造子類的例項物件this,然後再將父類的方法新增到this上面。es6 的繼承機制完全不同,實質是先將父類例項物件的屬性和方法,加到this上面(所以必須先呼叫super方法),然後再用子類的建構函式修改this。

ES6 知識點彙總 1 10

es6是新一代的語言標準,es6規範了js使用標準,新增了js原生方法,更適合大型應用開發。babel是乙個es6轉碼器,可以把es6 轉化成es5 以便相容尚未支援es5的專案 es5沒有塊級作用域的概念 es6新增塊級作用域的概念 變數提公升 在使用var申明變數的時候,會提到當前作用域的頂端,...

ES6知識點總結

面向過程和物件導向的對比 面向過程 物件導向 物件 物件是由屬性和方法組成的 類 class 在 es6 中新增加了類的概念,可以使用 class 關鍵字宣告乙個類,之後以這個類來例項化物件 物件導向的思維特點 抽取 抽象 物件共用的屬性和行為組織 封裝 成乙個類 模板 對類進行例項化,獲取類的物件...

ES6知識點簡單總結

let宣告的變數只能在所處遇到的快級有效。不存在變數提公升。暫時性死區,不受外部 影響。在乙個大括號中使用let關鍵字宣告的變數才具有塊級作用域,var關鍵字不具有這個特點 具有塊級作用域。使用const關鍵字宣告的常量必須賦值。常量賦值後值不能更改。varletconst 函式級作用域 塊級作用域...