es6相較之前es5,增加了許多新的特性,提高了javascript體驗(yàn),我在es6學(xué)習(xí)和使用的過程中進(jìn)行了紀(jì)錄。
- 箭頭函數(shù)
箭頭函數(shù)簡化了函數(shù)的書寫方法,變的非常簡潔,還能解決this指向問題。示例如下:
//es5寫法:
var item = data.map( function ( item, i ){
return item;
})
//使用箭頭函數(shù)
var item = data.map( (item,i) => {
return item
})
- let 和 const
用于量的定義,let定義的量限定塊級作用域,超出該作用域就無法讀取到,并且同作用域內(nèi)let聲明的變量不能重復(fù);而const用于定義常量,無法改變它的值,示例如下:
for( let i=0;i<5;i++) {} console.log(i) //i is not defined
const DURATION = 3*1000;
DURATION = 6*1000; //Assignment to constant variable.
- 類
es6引入了class關(guān)鍵字,它其實(shí)說js原型模式的包裝,有了類的概念后,js的對象創(chuàng)建、繼承、實(shí)例化、構(gòu)造函數(shù)等就變得更加直觀易懂。示例如下:
//首先定義一個(gè)類
class Fruit {
constructor( name ){
this.name = name;
}
getName(){
console.log(this.name)
}
}
//創(chuàng)建子類繼承上面的類
class Banana extends Fruit{
constructor(name){
super(name);
}
testFunc(){
console.log('who is my father');
}
}
//測試
var fruit = new Fruit('fruit');
var banana = new Banana('banana');
fruit.getName(); //fruit
banana.getName(); // banana
banana.testFunc(); // who is my father
- 模板字符串
模板字符串相比起傳統(tǒng)字符串與變量混合寫法要簡潔易懂的多,它使用反引號`來創(chuàng)建字符串,而里面的變量可以用${變量}來表示,示例如下:
//es5寫法
var dom = '<div>hello,'+username+'</div>';
//es6語法
var dom = `<div>hello, ${username}</div>`;
- for...of 循環(huán)
for...of循環(huán)是es6新引進(jìn)的循環(huán)功能,它每次循環(huán)提供的是不同索引的值,示例如下:
var arr = [12,13,14,15,23];
for (i of arr){
console.log(i); //依次輸出:12, 13, 14, 15, 23
}
- 默認(rèn)參數(shù)
es6中定義函數(shù)時(shí)可以給參數(shù)設(shè)置默認(rèn)值,示例如下:
//es5寫法
function getName(name){
var myName = name || 'rose';
console.log('my name is'+myName);
}
//es6
function getName(name='rose'){
console.log(`my name is ${name}`);
}
- 拓展運(yùn)算符
擴(kuò)展運(yùn)算符是三個(gè)點(diǎn)(...)。它好比 rest 參數(shù)的逆運(yùn)算,將一個(gè)數(shù)組轉(zhuǎn)為用逗號分隔的參數(shù)序列,由于擴(kuò)展運(yùn)算符可以展開數(shù)組,所以不再需要apply方法,將數(shù)組轉(zhuǎn)為函數(shù)的參數(shù)了。示例如下:
// es5的寫法
function count(x, y, z) {
console.log(x,y,z);
}
var arr = [0, 1, 2];
f.apply(null, arr);
// es6的寫法
function count(x, y, z) {
console.log(x,y,z);
}
var arr = [0, 1, 2];
count(...arr);
- 對象字面量
es6可以在對象字面量里定義原型,可以不用function關(guān)鍵字來定義方法,也可以直接調(diào)用父類方法,示例如下:
var meat = {
cook(){
console.log('cook meat');
}
};
var human = {
_proto_:meat, //指定該對象原型為meat,繼承了meat
fruit(){
console.log('I like fruit');
}
};
meat.cook(); // cook meat
human.cook(); // cook meat
- Promise對象
Promise是異步編程的一種解決方案,創(chuàng)建了Promise對象就可以將異步操作以同步操作的流程表達(dá)出來,避免了層層嵌套的回調(diào)函數(shù)。此外,Promise對象提供統(tǒng)一的接口,使得控制異步操作更加容易,示例如下:
var promise = new Promise((resolve, reject)=>{
if(/*if success*/){
resolve('it completed');
}else{
reject(Error('it failed));
}
});
//綁定處理程序
promise.then(function(result){
console.log(result); // 程序成功后會運(yùn)行此處:it completed
},function(err){
console.log(err); //程序失敗會運(yùn)行此處:it failed
}
es6 的新特性/語法遠(yuǎn)不止上述總結(jié)的這些,具體中文文檔請參考:http://es6.ruanyifeng.com/