es6基礎0x007:展開

0x000 概述

展開符號真的是一個非常好用的東西,我常用於字符串分割、數組合並、數組拷貝、對象合併、對象拷貝。

0x001 語法

...iterableObj

0x002 函數調用的時候參數展開

這是在函數調用的時候,將參數展開,和剩餘參數有區別,剩餘參數是在函數聲明中使用

myFunction(...iterableObj);    

案例

function add(a, b){
    return a + b
}
add(...[1,2]) // 相當於 add(1,2) -> 3

0x003 數組聲明展開

可用於數組合並

[...[1,2,3],4] // 相當於[1,2,3].push(4) -> [1,2,3,4]
[...'1234'] // 相當於 '1234'.split("")

0x004 對象展開

可用於對象合併、對象拷貝

{...{name:1},age:2} // 相當於 Objeact.assign({},{name:1},{age:2}) -> {name:1,age:2}
{...{name:1}} // 相當於 Object.assign({},{name:1}) -> {name:1}

0x005 babel 翻譯

  • 字符串/數組展開

    • 源碼

      [...'1234']
    • 翻譯後
    function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
    
    [].concat(_toConsumableArray('1234'));
    
  • 對象展開

    • 源碼
    let a={...{name:1}}
    • 翻譯後
    var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
    
    var a = _extends({ name: 1 });
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章