ECMAScript6發(fā)布已經(jīng)一年多了,但是由于很多瀏覽器兼容性的問(wèn)題,目前還沒(méi)有很好的對(duì)它進(jìn)行實(shí)現(xiàn),所以ECMAScript6暫時(shí)還沒(méi)有達(dá)到那種極其火熱的程度,但是筆者通過(guò)對(duì)ECMAScript6的學(xué)習(xí)發(fā)現(xiàn)ECMAScript6真的時(shí)候十分好用,希望早日能在各大瀏覽器上盛行。
ECMAScript6是什么?
JS可以分為ECMAScript、BOM、DOM三種,通過(guò)版本的迭代ECMAScript已經(jīng)發(fā)展到ES6的程度,如果說(shuō)HTML5是個(gè)標(biāo)準(zhǔn),那個(gè)IE10+、高版本瀏覽器就是對(duì)它實(shí)現(xiàn),換句話說(shuō),Javascript就是對(duì)ECMAScript標(biāo)準(zhǔn)的實(shí)現(xiàn),簡(jiǎn)寫為ECMA或者說(shuō)是ES
我們?nèi)绾问褂肊S6
因?yàn)榭紤]到瀏覽器的版本問(wèn)題,對(duì)ES6的兼容性不盡相同,下面我講介紹三種使用ES6的方法
- 在線編譯
http://babeljs.io/repl/#babili=false&evaluate=true&lineWrap=false&presets=es2015%2Creact%2Cstage-2&code=
https://google.github.io/traceur-compiler/demo/repl.html#
注意:這種方法僅僅適用與在線的測(cè)試,開(kāi)發(fā)項(xiàng)目最好采用下面的辦法 - 添加腳本
<script src="traceur.js"></script>//這兩個(gè)缺一不可
<script src="bootstrap.js"></script>//這兩個(gè)缺一不可
<script type="module">//type="module"需要寫上
//這里寫你想要編寫的代碼
</script>
//注意:這里的bootstrap.js和那個(gè)boostrap框架可不是一個(gè)東西。不要混淆
- 如果是高版本瀏覽器,可能上面兩種方法都不必采用,我測(cè)試過(guò)高版本的chrome瀏覽器可以實(shí)現(xiàn)ES6的一些語(yǔ)法所以對(duì)瀏覽器不能實(shí)現(xiàn)的功能我會(huì)選擇第二種方法
ES6聲明變量let方法
在ES6中定義變量用 let
let a = 12;
alert(a);
這里let定義變量看似能和我們以前定義變量var 一樣使用但是實(shí)際上卻是有區(qū)別的
首先,它只能在塊級(jí)作用域里面生效,也就是說(shuō)在塊級(jí)作用域外就不能起作用
if(true){
let a=12;
}
alert(a); //這里會(huì)報(bào)錯(cuò)Uncaught ReferenceError: a is not defined
正是因?yàn)樵趬K級(jí)作用域中起作用所以在塊級(jí)作用域外無(wú)法使用,這個(gè)就是和var 定義的變量的最大區(qū)別,因?yàn)閘et自身的機(jī)制我覺(jué)得let最大的用處就是能當(dāng)作封閉空間來(lái)使用也就是說(shuō)上面的代碼可以等效于:
(function(){
var a = 12;
})()
相比較為繁瑣的封閉空間,是不是使用塊級(jí)作用域let更好呢?
但是我們需要注意的是:
- let只有在塊級(jí)作用域里面生效
- 不允許重復(fù)聲明(重復(fù)聲明會(huì)報(bào)錯(cuò))
ES6常量定義const
使用const定義的是一個(gè)常量,因?yàn)閏onst定義之后就再也無(wú)法更改
const a = 12;
a = 1;
alert(a);//這里會(huì)報(bào)錯(cuò)
const a = 12;
const a = 1;
alert(a);//這樣依然會(huì)報(bào)錯(cuò)
所以我們?cè)谑褂胏onst的時(shí)候一定要注意:
const必須給初值因?yàn)槁暶髦笤僖矡o(wú)法修改,同時(shí)它不允許重復(fù)聲明
它的用途就是利用這種特性,防止意外修改變量,比如引入的庫(kù)名和組件名
ES6字符串連接新方法
個(gè)人覺(jué)得字符串拼接是個(gè)麻煩的事情,一個(gè)兩個(gè)還好,但是如果多了,有的時(shí)候真的應(yīng)接不暇,
以前我們字符串拼接的時(shí)候采用的方法是:
var a = 'bushi' ;
var str = 'kexi' + a + 'ni';
//個(gè)人感覺(jué)這種方式很好
var a = 'bushi' ;
var str = `kexi${a}ni`;
解構(gòu)賦值
按照一定模式,從數(shù)組和對(duì)象中提取值,對(duì)變量進(jìn)行賦值,這被稱為解構(gòu)。解構(gòu)賦值對(duì)處理一些數(shù)據(jù)非常擅長(zhǎng),比如處理后臺(tái)返回給我們數(shù)據(jù)
數(shù)組的解構(gòu)賦值:
let [a,b,c]=[12,15,3];
console.log(a); //12
console.log(b); //15
console.log(c); //3
console.log(d); //undefined
var [a,[b,c],d]=[1,[3,5],7];
//注意:左面的結(jié)構(gòu)和右邊的結(jié)構(gòu)要一樣
對(duì)象的解構(gòu)賦值:
let {a,b,c}={a:3,b:12,c:7};
console.log(a,b,c);
//對(duì)象的解構(gòu)賦值可以不用考慮順序的問(wèn)題
解構(gòu)賦值還可以給默認(rèn)值:
function demo(json){
/*var a=json.time || 1000;
alert(a)*/
var {a=800}=json;
//當(dāng)沒(méi)有參數(shù)的時(shí)候默認(rèn)的json.a為800,類似于:
/*var json = {};
var a = json.a || 800;*/
alert(a);
}
demo({})