循環與迭代器Iterator
在ES6之前,我們常常使用while,for和for...in來遍歷對象(不建議使用for...in來遍歷數組,因為遍歷出來的鍵不是數字,而且在部分瀏覽器中會產生亂碼)。而map和forEach這類方式的缺陷是布恩那個直接跳出整個循環,所以在ES6中,對數組循環遍歷的最佳方式是for...of。而迭代器Iterator的出現可以讓遍歷數組,對象和集合的方式更加靈活可控。
const numbers=[1,2,3,4,5];
for(let number of numbers){
console.log(number) //1,2,3,4,5
}
let iterator=numbers[Symbol.iterator]();
let result=iterator.next();
console.log(result.value); //1
生成器Generator
Generator是針對函數內代碼塊的執行控制,使用yield關鍵字來分割多個不同的代碼塊。生命方法是函數名後面加上*來與普通函數區分。
const generator=function*(){
const numbers=[1,2,3];
for(let number of numbers){
yield console.log(number)
}
}
let result=generator();
result.next(); //1
集合類型Map+Set+WeakMap+WeakSet
集合類型的出現主要是出於這幾個問題的考慮:
一是對象的鍵名一般只能是字符串,而不能是對象,
二是對象沒有直接獲取屬性個數等這些方便操作的方法,
三是我們對於對象的任何操作都需要進入對象的內部數據中完成。
ES6中新增的這些類型就試圖彌補這些不足。
promise
promise可以用來避免異步操作函數里的多層嵌套回調問題。因為解決多層異步場景最直接的方式是回調嵌套,但如果操作層數多了,就會很難管理。
Symbol
ES6新增的基本數據類型,一般可以用作屬性的鍵值,並且能避免對象屬性鍵的命名衝突。
let object={}
let name=Symbol();
object[name]='最小白的小白';
Proxy
Proxy可以用來攔截某個對象的屬性訪問方法,然後重載對象的“.”運算符。
統一碼和進制數支持
ES6支持Unicode形式和二進制八進制數。
Reflect對象和tail calls尾調用
Reflect可以理解為原有對象上的一個引用代理,它用於對原有對象進行復制或取值操作,但不會出發對象屬性的getter或setter調用。
tail calls尾調用保證了函數尾部調用時調用棧有一定的長度限制,這使得遞歸函數即時在沒有限制輸入時也能保證安全性而避免發生錯誤。
以上就是ES6的核心特性,如果想獲取更多關於前端開發,javascript等諮詢,請關注最小白!
閱讀更多 前端小白說 的文章
關鍵字: Numbers JavaScript 技術