概述
在日常开发当中,我们经常会对对象的属性进行增删改查,例如删除对象属性,一般就会用到delete,判断对象身上是否具有某个属性,会用in操作符,设置对象会用到对象.属性=xx的方式等等,但是直接使用对象的这些操作,比如delete删除对象属性,我们并不知道是否删除成功。因此,我们操作对象的一些方法,我们就可以今天要说到的Reflect内置对象了。
Reflect
Reflect 是一个内置的对象,它提供拦截 JavaScript 操作的方法。这些方法与proxy handlers (en-US)的方法相同。其中的一些方法与 Object 相同,尽管二者之间存在某些细微上的差别。Reflect不是一个函数对象,因此它是不可构造的,Reflect对象身上具有Object.prototype原型对象上面大部分方法,因此我们可以直接调用Reflect上面的方法,可以实现使用Object.prototype上面方法一样的效果。
常见用法举例
检测一个对象是否存在特定属性(常用)
const duck = {
name: 'Maurice',
color: 'white',
}
Reflect.has(duck, 'color');
// true
Reflect.has(duck, 'haircut');
// false
给对象身上添加新的属性(常用)
const duck = {
name: 'Maurice',
color: 'white',
}
Reflect.set(duck, 'eyes', 'black');
// returns "true" if successful
获取对象的属性(常用)
const duck = {
name: 'Maurice',
color: 'white',
}
Reflect.get(duck, 'name');
删除对象身上某个属性==》取代delete(常用)
const duck = {
name: 'Maurice',
color: 'white',
}
Reflect.delete(duck, 'name');
// true
Reflect.delete(duck, 'sex');
//false ==>因为对象身上不存在sex属性,因此返回false,比delete操作符更加智能
总结
总之,Reflect上面的一些方法还是很好用的,可以在项目里面进行使用,特别是替换delete操作符,其他的一些该内置对象上面的方法不怎么常用,可以参考MDN