2019-02-22 ES6常用新特性

默認(rèn)參數(shù)

ES5中不能直接為函數(shù)的參數(shù)指定默認(rèn)值,只能通過以下方式:

function fn1(a,b,c){
    a = a || 1;
    b = b || 1;
    c = c || 1;
    console.log(a+b+c) //6   當(dāng)傳入的值為0或者false時,直接取到后面的值
}
window.onload = function(){
    fn1(0,3,2) 
}

es6可以直接把默認(rèn)值放在函數(shù)申明里

function fn1(a=1,b=1,c=1){
    console.log(a+b+c) 
}
window.onload = function(){
    fn1(0,3,2) //5  
    fn1(0,3) //4  a=0,b=3,c=1(默認(rèn)值)
    console.log((function fn2(a=1,b=1,c=1){}).length); //0
    console.log((function fn2(a,b=1,c=1){}).length); //1
    console.log((function fn2(a,b,c=1){}).length); //2
}
  • 函數(shù)的參數(shù)在指定默認(rèn)值之后,函數(shù)的length 屬性會失真,返回的length 值,是沒有指定默認(rèn)值的參數(shù)的個數(shù)

ES6語法的好處:
1.簡潔
2.閱讀代碼的人可以看出哪些參數(shù)是可以省略的,不用查看函數(shù)體或文檔
3.有利于將來的代碼優(yōu)化,即使未來的版本即使拿掉這個參數(shù),以前的代碼也可以運(yùn)行
還有參數(shù)變量是默認(rèn)聲明的,不能在函數(shù)體內(nèi)部再進(jìn)行聲明。

模板對象

在ES5,我們可以這樣組合一個字符串:

var name = 'Your name is ' + first + ' ' + last + '.';
var url = 'http://localhost:3000/api/messages/' + id;

ES6中,我們可以使用新的語法$ {name},并把它放在反引號里

var name = `Your name is ${first} ${last}. `;
var url = `http://localhost:3000/api/messages/${id}`;

多行字符串

在ES5中,我們不得不使用以下方法來表示多行字符串:

var oUl = document.createElement('ul');
document.body.appendChild(oUl);
var html =' ';
html += '<li>111哈哈哈哈哈哈哈哈</li>';
html += '<li>222哈哈哈哈哈哈哈哈</li>';
html += '<li>333哈哈哈哈哈哈哈哈</li>';
html += '<li>444哈哈哈哈哈哈哈哈</li>';
oUl.innerHTML = html;                 

ES6中,僅僅用反引號就可以解決了:

var html =`<li>111哈哈哈哈哈哈哈哈</li>
           <li>222哈哈哈哈哈哈哈哈</li>
           <li>333哈哈哈哈哈哈哈哈</li>
           <li>444哈哈哈哈哈哈哈哈</li>`    

塊作用域和構(gòu)造let和const

詳見 http://www.itdecent.cn/p/7aea6ca4406a

箭頭函數(shù)

  • 可以使用“箭頭”(=>)定義函數(shù)
用法對比
  • 一個參數(shù)
//es5
var fn1 = function(a){
    return a
}
console.log(fn1(2)) //2

//es6
var fn1 = a =>a
console.log(fn1(2)) //2

如上所示:a表示函數(shù)參數(shù),=>表示函數(shù)體,return可以省略,后面的a表示要返回的內(nèi)容

  • 沒有參數(shù),需要在箭頭前加上小括號
//es5
var fn1 = function(){
   let a = 1
    return a
}
console.log(fn1()) //1

//es6
var fn1 = () =>{
   let a = 1
    return a
}
console.log(fn1()) //1
  • 多個參數(shù)
//es5
var sum = function(a,b){
    return (a+b)
}
console.log(sum(2,3)) //5

//es6
var sum1 = (a,b) =>{ let c=a+b; let d=a-b; return c+d }
console.log(sum(2,3)) //5

多個參數(shù)需要用到小括號(),參數(shù)間逗號間隔,函數(shù)體內(nèi)多條語句用塊語句{},塊語句的箭頭函數(shù)不會自動返回值,要用return返回

var userInfo = (name = ' 張三 ', age = 18  , phone = 13965210123 , address = ' 北京市朝陽區(qū) ' )=>{
    return (
      name : name,
      age : age,
      phone : phone,
      address : address,
    )
}
console.log(userInfo()) // name: " 張三 "  age:  18  phone: 13965210123  address: " 北京市朝陽區(qū) " 
console.log(userInfo(false))//name : false  age:  18  phone: 13965210123  address: " 北京市朝陽區(qū) "  
//傳入false也生效

返回對象時需要用小括號包起來,因為大括號被占用解釋為代碼塊了

  • 事件觸發(fā)時執(zhí)行的函數(shù)。
document.addEventListener('click', ev => {
    console.log(ev)
})

Promise 構(gòu)造函數(shù)

  • 方法:.then() .catch() .all()等
  • 參數(shù):resolve 方法和 reject 方法
  • 狀態(tài)(一旦狀態(tài)改變,就不會再變,任何時候都可以得到這個結(jié)果)
    pending(進(jìn)行中) -> resolved(已完成)
    pending -> rejected(已失敗)
    https://www.cnblogs.com/whybxy/p/7645578.html

參考文檔:http://web.jobbole.com/86984/
待續(xù)....

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

相關(guān)閱讀更多精彩內(nèi)容

  • 一、ES6簡介 ? 歷時將近6年的時間來制定的新 ECMAScript 標(biāo)準(zhǔn) ECMAScript 6(亦稱 ...
    一歲一枯榮_閱讀 6,209評論 8 25
  • 函數(shù)參數(shù)的默認(rèn)值 基本用法 在ES6之前,不能直接為函數(shù)的參數(shù)指定默認(rèn)值,只能采用變通的方法。 上面代碼檢查函數(shù)l...
    陳老板_閱讀 515評論 0 1
  • 函數(shù)參數(shù)的默認(rèn)值 基本用法 ES6之前,不能直接為函數(shù)的參數(shù)指定默認(rèn)值,只能采用變通的方法。 上面代碼檢查函數(shù)lo...
    oWSQo閱讀 292評論 0 0
  • 函數(shù)參數(shù)的默認(rèn)值 基本用法 在ES6之前,不能直接為函數(shù)的參數(shù)指定默認(rèn)值,只能采用變通的方法。 上面代碼檢查函數(shù)l...
    呼呼哥閱讀 3,708評論 0 1
  • 得不到的永遠(yuǎn)在騷動,被偏愛的永遠(yuǎn)有恃無恐。 這句話真是至理名言。但往往我們當(dāng)中很多人偏偏喜歡玩傲嬌,裝高冷,丑陋的...
    漸和閱讀 2,417評論 0 1

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