在javascript里面,对于object的数据属性中,如果写明value值和writable的属性为false,那么默认剩下的两个属性是false吗?
时间: 2024-09-22 20:07:36 浏览: 29
在JavaScript中,当你创建一个对象并为其数据属性设置`value`和`writable`属性为`false`时,并不会自动设置其他的属性(如`enumerable`和`configurable`)。这四个属性通常被称为对象的访问控制特性,它们是独立设置的。
- `value`:存储属性的值,默认就是你直接赋给它的值。
- `writable`:是否允许该属性的值被修改,默认是`true`,除非你在创建时明确设为`false`。
- `enumerable`:是否在遍历属性时显示出来,默认是`true`。
- `configurable`:是否可以改变这个属性(包括它的名字、值、可枚举性和可写性),默认也是`true`。
如果你想要将某个属性设置为不可枚举或不可配置,你需要单独指定`enumerable: false`或`configurable: false`。例如:
```javascript
let obj = {
name: { value: 'John', writable: false, enumerable: true, configurable: true },
age: { value: 30, writable: false, enumerable: false, configurable: false }
};
```
这里,`name` 属性不可修改,但可枚举;而 `age` 属性既不可修改也不可枚举。
相关问题
const object = { __proto__: { inherited: 1, }}; const fooSymbol = Symbol('foo'); // @ts-ignore object.normal = 2; object[fooSymbol] = 3; Object.defineProperty(object, 'unenumerable', { value: 4, enumerable: false, writable: true, configurable: true, }); Object.defineProperty(object, 'writable', { value: 4, enumerable: true, writable: true, configurable: false, }); Object.defineProperty(object, 'configurable', { value: 4, enumerable: true, writable: false, configurable: true, }); object[5] = 5;
这段代码定义了一个名为"object"的常量对象。该对象包含了一个名为"__proto__"的属性,该属性的值是一个对象,该对象有一个继承属性"inherited",其值为1。代码还定义了一个名为"fooSymbol"的Symbol类型变量。
接下来,代码通过"@ts-ignore"注释忽略了类型检查,给对象添加了一个名为"normal"的属性,其值为2,还添加了一个名为"fooSymbol"的属性,其值为3。然后使用Object.defineProperty()方法来定义对象的三个属性:"unenumerable"、"writable"和"configurable"。
"unenumerable"属性的值为4,它是不可枚举的,可写的,可配置的。"writable"属性的值为4,它是可枚举的,可写的,不可配置的。"configurable"属性的值为4,它是可枚举的,不可写的,可配置的。
最后,代码给对象添加了一个名为"5"的属性,其值为5。
阅读全文