1. 解构赋值 / 扩展运算符(...) 浅拷贝:
可代替argument 区别:
=>arguments是不定参数的数组,只有数组的长度和下标,没有数组的方法,在这里执行数组的arguments.push(5) 会报错
=>使用超级复制...可以在新数组中使用数组的方法
可代替Object.assign/concat (es7支持object): {...state,name:'aaa'};name会覆盖state中的重名属性
2.Symbol
es6中新增的原始数据类型,代表是唯一的,前六种:undefined、 null 、 Boolean、 String 、 Number、 Object
使用Symbol(desc)创建
可以用作标志位(如case后)和对象的属性(注意要用[]包裹)
Symbol.for("cat")创建可充用的symbol,
let s1 = Symbol.for("foo");
Symbol.keyFor(s1) // "foo"
let s2 = Symbol("foo");
Symbol.keyFor(s2) // undefined
3.Proxy
对目标对象的拦截 new Proxy(目标对象, handler)
handler为一个对象,里面可以用set,get, call, has,deleteProperty等等属性,
以set为例set: function(目标对象, 属性名, 属性值, Proxy 实例本身[可选])
4.Reflect
与proxy相对应, proxy是代理,reflect就是直接对对象操作。
例如在proxy中这样写set
set: function(target, name, value, receiver) {
var success = Reflect.set(target,name, value, receiver);
if (success) {
console.log('property ' + name + ' on ' + target + ' set to ' + value);
}
return success;
}
组合使用的实际功能就类似拦截器,在set成功时打印了个log
4362

被折叠的 条评论
为什么被折叠?



