ECMAScript 6入門(1)

ECMAScript 6標準(簡稱ES6)是JavaScript的下一個版本,在原來的基礎(chǔ)上新增加了很多強大的功能,首先,在學(xué)習(xí)ES6之前請大家自行升級自己的瀏覽器,因為版本太古老的瀏覽器是無法運行新版本的JavaScript代碼的。好了,今天我們來看一下它都有哪些特性。

`...`: 表示多行字符串,功能類似于\n

alert(`多
行
字
符
串`);

Map

JavaScript的對象有個小問題,就是鍵必須是字符串。但實際上Number或者其他數(shù)據(jù)類型作為鍵也是非常合理的。為了解決這個問題,最新的ES6規(guī)范引入了新的數(shù)據(jù)類型Map:它是一組鍵值對的結(jié)構(gòu),具有極快的查找速度。

 var score = new Map([["惠皎",100],["史振濤",59],["童靜",99]]);

Map具有以下方法:

get:通過鍵名獲取它的值,如果沒有,則返回undefined

score.get("惠皎");

set:添加新的key-value

score.set("余鵬舉",67);

has:查看是否存在key,返回值是true or false

 score.has("惠皎");   

delete:刪除key

score.delete("史振濤");

說明:由于一個Key只能對應(yīng)一個Value,所以多次對一個Key放入Value時,后面的Value會將前面的Value覆蓋。

Set

Set和Map類似,也是Key的集合,但不存儲value。由于key不能重復(fù),所以在Set中沒有重復(fù)的key,重復(fù)元素在Set中自動被過濾。

 var num = new Set([1,2,3,3,"3"]);      // 1,2,3,"3"

Set具有以下方法:

add:添加key,且每次只能傳一個值

 num.add(4);               // 1,2,3,"3",4

delete:刪除key

 num.add(3);               // 1,2,"3",4

iterable

遍歷Array可以采用下標循環(huán),遍歷Map和Set就無法使用下標。為了統(tǒng)一集合類型,ES6標準引入了新的iterable類型,Array、Map和Set都屬于iterable類型,具有iterable類型的集合可以通過for ... of循環(huán)來遍歷。

var a = [1,2,3,4];
for(var x of a){
  alert(x);               //會依次彈出1,2,3,4
}

你可能會有疑問,for ... of循環(huán)和for ... in循環(huán)有何區(qū)別?
for ... in循環(huán)由于歷史遺留問題,它遍歷的實際上是對象的屬性名稱。一個Array數(shù)組實際上也是一個對象,它的每個元素的索引被視為一個屬性,當我們手動給Array對象添加了額外的屬性后,for ... in循環(huán)會將給Array添加的屬性一起遍歷。

...rest

由于JavaScript函數(shù)允許接收任意個參數(shù),于是我們就不得不用arguments來獲取所有參數(shù)。

function selectRest(a, b) {
  var i, rest = [];
  if (arguments.length > 2) {
    for (i = 2; i<arguments.length; i++) {
      rest.push(arguments[i]);}
    }
   console.log('a = ' + a); 
   console.log('b = ' + b);
   console.log(rest);
}

為獲取除了已定義參數(shù)a、b之外的參數(shù)不得不用arguments,循環(huán)要從索引2開始以便排除前兩個參數(shù),這種寫法很別扭,只是為了獲得額外的rest參數(shù),有沒有更好的方法?為了解決這一問題,ES6標準引入了rest參數(shù)。上面的函數(shù)可以改寫為:

function selectRest(a,b,...rest){
  console.log("a = "+a);
  console.log("b = "+b);
  console.log(rest);
}
selectRest(1,2,3,4,5,6);

rest參數(shù)只能寫在最后,前面用...標識。從運行結(jié)果可知,傳入的參數(shù)先綁定a和b,多余的參數(shù)以數(shù)組形式交給變量rest,所以,不再需要arguments我們就獲取了全部參數(shù)。

let和const

JavaScript的變量作用域?qū)嶋H上是函數(shù)內(nèi)部,在for循環(huán)等語句塊中無法定義具有局部作用域的變量。

function add() {
  var sum = 0;
  for (var i = 0; i < 10; i++) {
    sum += i;
  }
  i += 1;
  return i;
}
console.log(add());          // 會打印11

為解決塊級作用域,ES6引入了新關(guān)鍵字let,用let替代var可以申明塊級作用域的變量:

function add1() {
  var sum = 0;
  for (let i = 0; i < 10; i++) {
    sum += i;
  }
  i += 1;
  return i;
}
console.log(add1());      // 報錯

var和let申明的是變量,如果要申明一個常量,在ES6之前是不行的。ES6標準引入了新的關(guān)鍵字const來定義常量,const與let都具有塊級作用域。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容