js中object的property系列,如何打造一个可删除属性?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
书接前文,苏南大叔在上文中,描述了参数writable
,本文描述新的参数configurable
。按照msdn
的官方描述呢,这个参数是用来控制属性是否可以被删除的。那么,苏南大叔就有些疑惑。为啥不取名叫做deletable
呢?所以,个人怀疑,这个参数configurable
还是有其他的使用场景的,暂存。
本文描述这个configurable
属性。本文测试环境:chrome@87.0.4280.88
。本文中的范例代码,是苏南大叔自己想的,可能并不能完全说明问题,欢迎留言补充。
如何删除一个属性
苏南大叔的个人理解就是:object
的属性,就类似于数组的成员。所以,对于object1
的property1
,这里的删除办法如下所示:
delete object1.property1;
delete object1["property2"];
范例代码:
const object1 = {
property1:'p1',
property2:'p2'
};
console.log(object1.property1);
console.log(object1.property2);
delete object1.property1;
delete object1["property2"];
console.log(object1.property1);
console.log(object1.property2);
执行结果是:
> "p1"
> "p2"
> undefined
> undefined
所以,在这里,使用delete
关键字删除了相关属性。
默认值有歧义
这里涉及的关键词是configurable
。经过苏南大叔的实验,这个属性的参数的默认值略有歧义。
对于默认写法的配置的属性,是可以删除的。就是说configurable
默认为true
。
而使用defineProperty()
函数配置的属性,默认不配置configurable
的话,对应属性是不能删除的,就是说configurable
默认为false
。
const object1 = {
property1:'p1'
};
Object.defineProperty(object1, 'property2', {
value: 'p2'
});
Object.defineProperty(object1, 'property3', {
value: 'p3',
configurable:true
});
Object.defineProperty(object1, 'property4', {
value: 'p4',
configurable:false
});
console.log(object1.property1);
console.log(object1.property2);
console.log(object1.property3);
console.log(object1.property4);
delete object1.property1;
delete object1.property2;
delete object1.property3;
delete object1.property4;
console.log(object1.property1);
console.log(object1.property2);
console.log(object1.property3);
console.log(object1.property4);
运行结果如下:
> "p1"
> "p2"
> "p3"
> "p4"
> undefined
> "p2"
> undefined
> "p4"
在本例中,被删除的是p1
(因为定义方式)以及p3
(因为configurable:true
)。
相关链接
- https://newsn.net/say/js-object-writable.html
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete
总结
根据定义属性的方式不同,是不是达到configurable
的默认值,也是不同的。更多js
的相关文章,欢迎查看苏南大叔的博客:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。