學習了一段時間的前端知識,日常中會copy些語法使用規則,對于這些語法雖會簡單的使用,但并不咋了解,因此決定對這些進行了一番系統的學習:
一.聲明變量
現在JAVAScript有三種不同關鍵字聲明變量:var、let、const;在ES6之前使用的一直是var,ES6是添加了let、const;
- var聲明的變量作用域為全局作用域
- let聲明的變量作用域為塊級作用域
- const聲明的變量是不允許改變(即只讀,通常以大寫字母命名)
二、箭頭函數
舉例:
const array=[1,2,3,4,5];
const odd=array.filter(arr => arr%2 ==0 )
像這樣帶有“=>”箭頭的函數寫代碼的時候會經常接觸到,這樣的函數稱為箭頭函數,是ES6中新增的特性,可以使代碼看上去更加簡潔,但同時對于不了解這種寫法的人來說就不是較容易理解了。若不使用這種帶箭頭的寫法:
const array=[1,2,3,4,5];
const odd=array.filter(function(arr){arr => return arr%2 ==0; })
三、字符串拼接
字符拼接是我們經常使用到的,通常情況下,代碼會這么寫
let name='張三';
console.log(name+'你好!');
ES6語法中使用 ` ` 字符拼接:
let name='張三';
console.log(`${name}你好!`);
四、解構賦值
解構賦值主要用于數組和對象賦值
//對象解構賦值
let obj = {
'name': 'admin',
'age': 22
};
let {name , age}=obj;//name='admin';age=22
//數組解構賦值
let [a , b , c]=[1, 2, 3];//a=1; b=2; c=3
對象的解構賦值的內部機制,是先找到同名屬性,然后再賦給對應的變量,如圖,列舉了些更詳細的用法:
ES語法之解構
五、擴展運算符
擴展運算符就是三個點( ... ),這是ES6新增的語法,作用是將一個數組轉成用逗號分隔的參數序列;ES8將這個運算符引入了對象:
ES語法之擴展運算符
六、異步編程
在實際編碼過程中,經常會遇到JavaScript代碼異步執行,怎樣處理好異步編程帶來的問題非常重要。
異步問題:回調地獄 和 捕獲異常。
試想一個場景,我們需要在一個方法運行結束后再運行另一個方法,最常見的就是在調用方法的最后調用下一個方法,但這種情況一個方法里面調用另一個放,另一個方法中又再調用其它方法...,有很多這樣的方法的話就會形成回調地獄。
在異步代碼中捕獲異常比較麻煩,可能需要手動配置捕獲方式,但何時捕獲是個問題,書寫時會引起維護上的困難。
常用解決方案:
- 1.callback
通過回調函數的方式處理異步,即將函數作為參數傳入另一個函數中。
- 2.Promise
Promise翻譯為“承諾”,簡單的思考為當一個異步代碼執行后,我們不需管代碼何時結束、出錯,我只需按照它的承諾去處理就行。
Promise有四種狀態fulfiled(成功)、rejected(失敗)、pending(進行中),之后新增Settled(最終狀態);resolve修改成功狀態,reject修改失敗狀態,
Promise的整理如圖:
ES語法之異步編程Promise
- 3.Generator
ES6新引入了Generator,generator是一個構造器,函數執行時不會執行函數體的內部而是返回一個構造器對象,通過next方法調用函數主體,遇到yield會暫停執行。
function* generatorTest() {
console.log(yield '1') //test1
console.log(yield '2') //test2
console.log(yield '3') //test3
}
const gen = generatorTest();
gen.next()
gen.next('test1')
gen.next('test2')
gen.next('test3')
- 4.co
為解決Generator需手動執行next方法的問題,網上也有很多封裝,最常見的就是co函數庫,但不便的是使用時需額外引入一個模塊。
- 5.async/await
ES7提供了更加方便的asyc函數和await命令,async返回一個promise對象,await后面接受一個promise實例。
async/await實際上是對Generator的封裝。
七、冪運算
ES7中引入了冪運算符**
console.log(3**2); // = 9
//等同于
Math.pow(3,2); // = 9
八、查詢數組元素
ES7中添加了數組includes()方法,用來普安段數組中是否執行指定的值。
['a','b','c'].includes('a'); // ture
//等同于
['a','b','c'].indexOf('a')>=0; // ture
數組是日常中經常使用的,對于數組操作的Array方法有哪些呢,如圖列舉經常使用的方法:
數組操作方法集
Array方法匯
九、String方式
String方法集合
十、基本數據值類型
ES語法之基本數據類型-值類型
ES語法總匯圖:
ES6、ES7、ES8、ES9、ES10新增語法特性圖






