本博客不欢迎:各种镜像采集行为,请尊重知识产权法律法规。大家都是程序员,不要闹得不开心。

书接前文,苏南大叔在上文中,描述了参数writable,本文描述新的参数configurable。按照msdn的官方描述呢,这个参数是用来控制属性是否可以被删除的。那么,苏南大叔就有些疑惑。为啥不取名叫做deletable呢?所以,个人怀疑,这个参数configurable还是有其他的使用场景的,暂存。

苏南大叔:js中object的property系列,如何打造一个可删除属性? - js-object-configurable-hero
js中object的property系列,如何打造一个可删除属性?(图2-1)

本文描述这个configurable属性。本文测试环境:chrome@87.0.4280.88。本文中的范例代码,是苏南大叔自己想的,可能并不能完全说明问题,欢迎留言补充。

如何删除一个属性

苏南大叔的个人理解就是:object的属性,就类似于数组的成员。所以,对于object1property1,这里的删除办法如下所示:

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);

苏南大叔:js中object的property系列,如何打造一个可删除属性? - js-object-delete-test
js中object的property系列,如何打造一个可删除属性?(图2-2)

运行结果如下:

> "p1"
> "p2"
> "p3"
> "p4"
> undefined
> "p2"
> undefined
> "p4"

在本例中,被删除的是p1(因为定义方式)以及p3(因为configurable:true)。

相关链接

总结

根据定义属性的方式不同,是不是达到configurable的默认值,也是不同的。更多js的相关文章,欢迎查看苏南大叔的博客:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。