es6

對象的計算屬性名
之前對象的屬性是不容許動態修改的,es6支持屬性賦值,如:
之前:
let obj1= {
    name: '熊二', 
    age: 18,
    sec: '女'
};


如今能夠:
let nameStr = 'name';
let ageStr = 'age';
let obj1 = {
    [nameStr]: '熊二',
    [`${ageStr}`]: 18,
    ['sec']: '女'
}
console.log(obj1)   // {     name: '熊二',      age: 18,     sec: '女' };


Object.assign(target,source) 對象合併
Object.assign方法用於對象的合併,將源對象(source)的全部可枚舉屬性,複製到目標對象(target)。第一個參數是目標對象,後面的參數都是源對象。
注意,若是目標對象與源對象有同名屬性,或多個源對象有同名屬性,則後面的屬性會覆蓋前面的屬性。
var target = { a: 1, b: 1 };
var source1 = { b: 2, c: 2 };
var source2 = { c: 3 };

Object.assign(target, source1, source2);
target // {a:1, b:2, c:3}
Object.assign方法實行的是淺拷貝,而不是深拷貝。也就是說,若是源對象某個屬性的值是對象,那麼目標對象拷貝獲得的是這個對象的引用。
var obj1 = {a: {b: 1}};
var obj2 = Object.assign({}, obj1);

obj1.a.b = 2;
obj2.a.b // 2
上面代碼中,源對象obj1的a屬性的值是一個對象,Object.assign拷貝獲得的是這個對象的引用。這個對象的任何變化,都會反映到目標對象上面。
Object.assign 應用
(3)克隆對象
function clone(origin) {
  return Object.assign({}, origin);
}
上面代碼將原始對象拷貝到一個空對象,就獲得了原始對象的克隆。
不過,採用這種方法克隆,只能克隆原始對象自身的值,不能克隆它繼承的值。若是想要保持繼承鏈,能夠採用下面的代碼。
function clone(origin) {
  let originProto = Object.getPrototypeOf(origin);
  return Object.assign(Object.create(originProto), origin);
}
(4)合併多個對象
     將多個對象合併到某個對象。
const merge =
  (target, ...sources) => Object.assign(target, ...sources);
若是但願合併後返回一個新對象,能夠改寫上面函數,對一個空對象合併。
const merge =
  (...sources) => Object.assign({}, ...sources);


函數的參數默認值:
funtion ( a = ' $ ' ) {   }      
在形參位置能夠傳默認值,意思爲:不穿參數默認使用 a = ' $ ' 

forEach和map的區別
let arr = [
    {
        id:1,
        name:'小一'
    },
    {
        id:2,
        name:'小二'
    },
    {
        id:3,
        name:'小三'
    }
]
let newArr1 = arr.filter((item)=>{
    return item.id ===1;
})
console.log(newArr1) // [{id:1,name:'小一'}]
let newArr0 = arr.filter((item)=>{
    return item.id;
})
console.log('filter', newArr0) // [{id:1,name:'小一'},{id:2,name:'小二'},{id:3,name:'小三'}]

let newArr2 = arr.map((item)=>{
 return item.id;
})
console.log(newArr2)// [1,2,3]

共同點:都是返回一個新的數組
Map
Map是一組鍵值對的結構,具備極快的查找速度。具備如下方法:
let m = new Map();
 m.set('xiaoming',{name:'小明',age:16});
 m.set('xiaohuang',{name:'小黃',age:18});
 m.get('xiaoming')     //{name:'小明',age:16}
 m.has('xiaohuang')    //true
 m.delete('xiaoming');
 m.has('xiaoming')     //true

應用:

//獲取xiaomhuang對應的成績
let nameArr = ['xiaoming', 'xiaolan', 'xiaohaung']
let numberArr = [80, 90, 76]
numberArr.forEach((numberItem) => {
    nameArr.forEach((itemName, itemNameIndex) => {
        if(itemName === 'xiaohaung') {
            numberArr[itemNameIndex] // 76
        };
    })
})

//使用Map
let m = new Map([
    ['xiaoming', 80],
    ['xiaolan', 90],
    ['xioahuang', 76]
]);
m.get('xioahuang') // 76

 

Set
let s = new Set();
 console.log('初始',s) //{}
 s.add(1);
 console.log(s) // {1}
 s.add('1') 
 console.log(s) // {1,'1'}
 s.add(1);
 console.log(s) // {1,'1'}
 s.delete('1') 
 console.log(s) // {1}
 
 let arr = [1,2,3,1];
 let newSet = new Set(arr);
 console.log('去重',newSet );

proxy(代理對象)
es5中,咱們可使用 Object.defineProperty和Object.defineProperty來實現對對象的監聽。
Proxy 代理的做用,好處是將 條件 和 對象 隔離開,利於後期代碼維護


let obj = {
    name: "猿跑跑",
    age: 28
}

let p = new Proxy(obj, {
    get: function(target, key) {   // 獲取的攔截函數(獲取時執行)
        if(key in target) {
            console.log(target[key])
        } else {
            console.log("對象沒有此屬性");
        }
    },
    set: function(target, key, value) {   //設置的攔截函數(值設置時執行)
        target[key] = value;
        console.log("設置成功,值爲:",target[key]);
    },
    has: function (target,key) { // 是否存在某個屬性
        if (key in target) { // 判斷obj對象中是否存在key屬性
            console.log('存在');
        } else {
            console.log('不存在');
        };
    }
});

p.age = 22;    // 設置
p.age; // 22
p.height;  // 對象沒有此屬性
'age' in p; // 存在
'weight' in p; // 不存在


1、filterfilter 是`過濾`的意思,因此這個方法的做用就是返回一個匹配過濾條件的新數組,
let arr = ['a','b','a','c'];
let newArr = arr.fillter((item)=>{
    return item === 'a';
})
console.log(newArr) //['a','a']

場景:數組去重、取交集 
var a = [1, 2, 3, 4] 
var b = [3, 4, 5, 6] 
let intersection = a.filter(v => b.includes(v)) 
let difference = a.concat(b).filter(v => !a.includes(v) || !b.includes(v)) 
console.log('交集', intersection) 
console.log('去重', difference)


求數組的最小值
var arr = [23, 45, 40, 30, 12];
var iMin = Math.min(...arr);
console.log(iMin);

文件導出:
    //  es5的導出
    module.exports = 'bmw7';

    //  es6的導出(帶默認接口)
    export default {
       str:'bmw6'
    }

文件導入:
    //  es5導入模塊
    var modeA = require('./mod/a.js');

    //  es6導入模塊
    import modeA from './mod/a.js'

模塊化
es6:
若是:導出爲
     export default  obj
那麼:引入爲
     import modeA from './mod/a.js'

若是:導出爲
     export const str = aaa
那麼:引入爲
     import { str } from './mod/a.js'

const getDate = () => {
    let d = new Date();
    return d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate();
};

export { getDate };


module.js導出:
a.js導入:
這二者的區別是,export {<變量>}導出的是一個變量的引用,export default導出的是一個值
什麼意思呢,就是說在a.js中使用import導入這2個變量的後,在module.js中由於某些緣由x變量被改變了,那麼會馬上反映到a.js,而module.js中的y變量改變後,a.js中的y仍是原來的值
連接:https://juejin.im/post/5c6234f16fb9a049a81fcca5

箭頭函數的簡寫:
函數: 有大括號並有返回值時。this指向建立它的做用域,而咱們一般說的運行環境。

(a)=>{
   return  'b'
}
es6可寫成 :
      a => 'b'

複製(延展)數組:(只能複製一層,不能複製嵌套不少層 ,不能深度 複製) ver  arr  =  [ 'a'  ,  'b'  ] ...arr     ===    'a'  ,  'b'            將arr數據拿出來 [ ...arr ]    ===   複製數組 (將arr數據拿出來,放到一個新的數組) 對象的延展 let obj1 = {     name: '李四',     age: 6 } let obj2 = {     ...obj1,     height: 160 } console.log('擴展後', obj2);
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息