ECMAScript 6.0(如下簡稱 ES6)是 JavaScript 語言的下一代標準,已經在 2015 年 6 月正式發佈了。 一個常見的問題是,ECMAScript 和 JavaScript 究竟是什麼關係? 要講清楚這個問題,須要回顧歷史。1996 年 11 月,JavaScript 的創造者 Netscape 公司,決定將 JavaScript 提交給標準化組織 ECMA,但願這種語言可以成爲國際標準。次年,ECMA 發佈 262 號標準文件(ECMA-262)的初版,規定了瀏覽器腳本語言的標準,並將這種語言稱爲 ECMAScript,這個版本就是 1.0 版。 該標準從一開始就是針對 JavaScript 語言制定的,可是之因此不叫 JavaScript,有兩個緣由。一是商標,Java 是 Sun 公司的商標,根據受權協議,只有 Netscape 公司能夠合法地使用 JavaScript 這個名字,且 JavaScript 自己也已經被 Netscape 公司註冊爲商標。二是想體現這門語言的制定者是 ECMA,不是 Netscape,這樣有利於保證這門語言的開放性和中立性。 所以,ECMAScript 和 JavaScript 的關係是,前者是後者的規格,後者是前者的一種實現(另外的 ECMAScript 方言還有 JScript 和 ActionScript)。平常場合,這兩個詞是能夠互換的。 ——<<ES6 標準入門>>javascript
let和const的出現打破了var的壟斷,而且避免了var可提高變量的弊端; let和const爲塊級做用域,上級不能訪問java
let a // a後續可再次賦值
const b = 1 // b的值不能更改,更改報錯
複製代碼
很是推薦使用,能夠減小代碼,直接看用法數組
beforepromise
let a = 1;
let b = 2;
let c = 3;
複製代碼
now瀏覽器
let [a, b, c] = [1, 2, 3]; // 數組
let {a, b, c} = {1, 2, 3}; // 對象
複製代碼
beforeapp
var obj = {
a: 1,
b: 2,
c: {
d: 3
}
}
var a = obj.a
var b = obj.b
var d = obj.c.d
複製代碼
nowasync
const obj = {
a: 1,
b: 2,
c: {
d: 3
}
}
const {
a, // a = 1
b: newB, // 解構出b的值爲newB newB=2
c:{
d // 多級解構直接取到d d=3
},
e // 若是不存在 e = undefined
} = obj
複製代碼
之前的字符串擴展要寫n個',有了字符串擴展方便易讀 要拼接 hi, wang,hello world函數
beforeui
var name = 'wang'
var str = 'hi, '+name+'hello world'
複製代碼
nowthis
const name = 'wang'
const str = `hi, ${name},hello world`
複製代碼
在寫函數時,常常會傳參,而沒有傳參會出現undefined,如今有了默認值,在參數使用時就會有了兜底
before
function say(name, something) {
console.log(name+' say:'+something)
}
say('wang', 'hi') // wang say:hi
say('wang') // wang say:undefined
say() // undefined say:undefined
複製代碼
now
function say(name='wang', something='nothing'){
console.log(`${name} say:${something}`)
}
say('he', 'hi') // he say:hi
say('he') // he say:nothing
say() // wang say:nothing
複製代碼
若是要拷貝一個數組或者一個對象,每每須要遍從來實現
before
// 數組
var arr = [1, 2, 3]
var copyArr = []
for (var i = 0; i < arr.length; i++) {
copyArr.push(arr[i])
}
console.log(copyArr) // [1, 2, 3]
// 對象
var obj = {
a: 1,
b: 2,
c: {
d:3
}
}
// 太多了,偷懶不寫了
複製代碼
now
// 數組
const arr = [1, 2, 3]
const copyArr = [...arr]
console.log(copyArr) // [1, 2, 3]
// 對象
const obj = {
a: 1,
b: 2,
c: {
d:3
}
}
const copyObj = {
...obj
}
複製代碼
是否是很爽 函數的傳參也可使用擴展運算符,能夠應對傳參不肯定個數的狀況
在定義和使用函數時經常會使用this,常常會出現以下狀況
before
const self = this
const boundMethod = function(...params) {
return method.apply(self, params)
}
// 或者
const boundMethod = method.bind(this)
複製代碼
now
const boundMethod = (...params) => method.apply(this, params) //簡化函數定義,同時不用再對this另存爲
複製代碼
箭頭函數this對象爲定義時所在的對象,不可更改
在調用接口的時候常常會用回調,回調地獄異常恐怖
const firtFunc = () => {
return new Promise((resolve, reject) => {
if(success){
resolve('success')
}else{
reject('fail')
}
})
}
firstFunc()
.then(res => {
console.log(res) // success
secondFunc()
})
.then(res => {
})
.catch(res => {
console.log(res) // fail
})
複製代碼
上面promise的寫法雖然能暫時解決回調地獄的問題,可是代碼仍是很差看,沒關係,還有語法糖async、await
const firtFunc = async () => {
return new Promise((resolve, reject) => {
if(success){
resolve('success')
}else{
reject('fail')
}
})
}
try{
await firtFunc()
await secondFunc() // 返回resolve纔會執行
}catch(err){
// reject走到這裏
}
複製代碼
強烈推薦《ES6標準入門》——阮一峯