ES6中有哪些新特性?
ES6中的新特性(一)
ECMAScript6.0(以下簡稱 ES6)是 JavaScript 語言的下一代標準,已經在 2015 年 6 月正式釋出了。它的目標,是使得 JavaScript 語言可以用來編寫複雜的大型應用程式,成為企業級開發語言。
我們來看看ES6都做了哪些擴充套件。
Let和const關鍵字
變數的解構賦值
字串,數值的擴充套件
陣列,物件的擴充套件
函式的擴充套件
for...of
先從let和const這兩個關鍵字看起。
let關鍵字類似於var,但是他又和var有些不同,主要有兩點,
避免了變數提升
只在塊級作用域內起作用
來看一段程式碼
var a = 1;
(function () {
alert(a);
var a = 2;
})()
這時候彈出的會是undefined,因為在瀏覽器執行的時候,會有變數提升,也就是會先宣告變數a,這段程式碼實際上是這樣的
Var a;
Alert (a);
Var a=2;
而我們使用let關鍵字,就不會有這個問題,
var a = 1;
(function(){
alert(a);
let a = 2;
})();
這個時候瀏覽器會報錯,
因為變數沒有提升,所以執行到alert(a)的時候a還是未定義狀態,而且因為let只在塊級作用域裡起作用,所以外部的a也取不到。
然後我們再來看看const。const就是常量的意思,所以他就有了不可更改的屬性,嘗試給一個常量改變值是會報錯的,
const Name='matt';
Name='john';
const和let一樣,只在塊級作用域內作用, 不存在變數提升,必須先定義後使用, 不可重複宣告, 聲明後必須賦值。
const Person={
'name':'matt'
};
Person.name='john';
Person.age=12;
console.log(Person);
這段程式碼是ok的。怎麼const又可以更改了,這就涉及到了傳值賦值和傳址賦值。你嘗試去給Person賦一個新地址會報錯的,比如Person={}。但是你只是更改它的屬性的話是OK的。
那什麼是傳址賦值呢?就好比,你預約了一個裝修工(張師傅)到你家進行裝修,你把你家的地址告訴了他,他順著地址來到你家,按照你的要求,把你家的門弄成紅色。
僅僅過了兩天,你覺得不好看,你又找了另一個裝修工(王師傅),你也把地址告訴他,王師傅來到後也是按照你的要求,把門弄成了綠色。
最後,不管是張師傅還是王師傅,通過這個地址來到你家的時候,看到的門肯定是綠色的,因為最後一次修改是改成綠色。
寫成程式碼就是
varZhang = {"door":"red"};
//次日,你把地址也告訴了王師傅
var Wang = Zhang;
//王師傅按照地址,去到後把門改成綠色
Wang.door = "green";
//最後不管是張師傅還是王師傅來到你家,看到門都是綠色的
console.log(Wang);//結果:輸出 {door: "green"}
console.log(Zhang);//結果:輸出 {door: "green"}
這就是傳址賦值了。
再來看一個ES6的新特性,for…of。平時我們for迴圈的時候,是這樣寫的
Arr=[1,2,3,4,5,6]
for(vari=0;i<Arr.length;i++)
有了for…of,我們可以更清晰,牛逼得去遍歷陣列。
for(let itemof Arr)可以達到和上面程式碼同樣得效果。
我們列舉一下for...of的優勢:
寫法比for迴圈簡潔很多;
可以用break來終止整個迴圈,或者continute來跳出當前迴圈,繼續後面的迴圈;
結合keys( )獲取到迴圈的索引,並且是數字型別,而不是字串型別。
比如
var arr= [1,2,3,4,5];
for(let valueof arr){
if(value ==3){
//終止整個迴圈
break;
}
console.log(value);
}
這樣我們就及時得跳出了迴圈
只會打印出來1和2.
也可以跳過當前迴圈,把break改成continue就可以了。我們也可以得到數字型別得索引,
vararr = [1,2,3,4,5];
for(let indexof arr.keys()){
console.log(index);
}
就可以打印出來0,1,2,3,4.
ES6有很多好玩的新屬性,我們暫時說這麼多。
常見問題:
1. ES6的相容問題?
現在瀏覽器對Es6的相容已經很好了,但是肯定還有不相容的瀏覽器,目前常見的相容轉換工具是Babel。
2. 什麼是程式碼塊?
任何一對花括號(這玩意:{ })中的語句都屬於一個塊,在花括號裡面用let定義的所有變數在花括號外都是不可見的,我們稱之為塊級作用域。
3.什麼是變數提升?
在載入程式之前,瀏覽器會做一些準備工作,變數、函式表示式——變數宣告,預設賦值為undefined;
this——賦值;
函式宣告——賦值;
這三種資料的準備情況我們稱之為“執行上下文”或者“執行上下文環境”。這就是變數提升