目錄
一些歷史
ECMAScript和JavaScript
ECMAScript 和 JavaScript 的關係是,前者是後者的規格,後者是前者的一種實現(另外的 ECMAScript 方言還有 Jscript 和 ActionScript)。日常場合,這兩個詞是可以互換的。
ES6與ECMAScript2015的關係
ES6既是一個歷史名詞,也是一個泛指,含義是5.1版以後的JavaScript的下一代標準,涵蓋了ES2015、ES2016、ES2017等等,而ES2015則是正式名稱,特指該年發佈的正式版本的語言標準。
總的來說,ES6是ECMAScript6的簡寫,ECMAScript是JavaScript的標準,ECMAScript 6泛指“下一代JavaScript語言”,具體每年發佈的都有自己的專屬名稱,比如2015年發佈的則爲ESMAScript 2015。目前說的 ES6 語法,一般值得都是ESMAScript2015版。
ES6語法
定義變量的新關鍵字
let
let跟var一樣,也是用來定義變量,但是他比var更加的安全,體現在以下兩點:
- 不會出現變量提升的情況
- 只在當前代碼塊內有效
不出現變量提升的意思就是在定義在使用之後會報錯。
但是注意:小程序中不能真正解析ES6語法,他只是藉助了第三方工具將ES6語法轉成ES5語法運行的,在底層也是用var來代替let的,所以依然會發生變量提升。
只在塊內有效:
for(var i = 0;i < 5;i++)
{
console.log(i)
}
console.log(i)
這樣寫在塊外面也會輸出i的值,這顯然是不合理的。那麼如果使用let:
for(let i = 0;i < 5;i++)
{
console.log(i)
}
console.log(i)
這樣在塊外面,會輸出undefined。
const
const是用來定義常量的,常量是一旦定義好了以後,就不能夠再修改了。
const只是用來限制指向的內存地址不能改變,但是如果這個內存地址上的數據改變了,是可以的。或者說得直白一點,就是指向的如果是一個可變的容器,容器中的數據改變了,那麼是允許的。比如以下代碼:
const mylist = [1,2,3];
mylist.push(4);
console.log(mylist);
輸出爲[1,2,3,4]
函數
默認參數
function fetch(url,method="get"){
// 發送網絡請求案例
console.log(url);
console.log(method);
}
以後我們在使用fetch函數的時候,可以不傳method參數,他會默認使用get。
注意:定義默認參數的時候,默認參數必須要在非默認參數的後面。
箭頭函數
有時候,函數作爲一個參數變量傳進去的時候,爲了簡化他的寫法,我們可以使用箭頭函數來實現。
原來的代碼:
wx.request({
url: "http://www.baidu.com/",
success: function(res){
// 做一些事情
}
});
使用箭頭函數:
wx.request({
url: 'http://www.baidu.com/',
success: res => {
//做一些事情
}
});
箭頭函數的語法是
(參數1,參數2) => {代碼塊}
如果只有一個參數,可以不使用圓括號
a => a+1
另外,如果只有一行代碼,那麼可以不用花括號。
Promise風格的調用
const p = new Promise(function(resolve,reject){
// 如果執行以下代碼,那麼會執行下面的then函數
setTimeout(() => {
resolve("請求成功");
},1000);
// 如果執行以下代碼,那麼會執行下面的catch函數
setTimeout(() => {
reject("請求失敗")
},1000);
// 如果以上兩個代碼都執行,那麼只會調用下面的then方法,因爲resolve的調用在前面。
});
p.then((res) => {
console.log(res);
}).catch((error) => {
console.log(error);
});
兩個函數只能調用一個。