defineproperty 配合 Object.keys 进行遍历
时间: 2024-03-15 17:22:14 浏览: 16
可以使用 defineProperty 配合 Object.keys 进行遍历,如下示例代码:
```
var obj = {
name: 'John',
age: 30,
address: 'Beijing'
};
Object.keys(obj).forEach(function(key) {
Object.defineProperty(obj, key, {
enumerable: false
});
});
console.log(Object.keys(obj)); // Output: ['name', 'age', 'address']
```
此代码会将对象 obj 的所有属性设置为不可枚举,遍历时不会输出任何属性。
相关问题
Object.defineProperty()
`Object.defineProperty()` 是 JavaScript 中的一个方法,用于在一个对象上定义一个新属性或修改一个已有属性的特性(如可枚举性、可写性、可配置性等)。
语法为:
```javascript
Object.defineProperty(obj, prop, descriptor)
```
其中:
- `obj`:要定义属性的对象。
- `prop`:要定义或修改的属性的名称。
- `descriptor`:描述符对象,用来描述属性的特性。它有以下可选属性:
- `configurable`:是否可配置,即是否可以使用 `delete` 删除该属性或修改它的特性,默认为 `false`。
- `enumerable`:是否可枚举,即是否可以使用 `for...in` 或 `Object.keys()` 遍历到该属性,默认为 `false`。
- `value`:属性的值,默认为 `undefined`。
- `writable`:是否可写,即是否可以修改该属性的值,默认为 `false`。
- `get`:属性的 getter 函数,当访问该属性时调用。
- `set`:属性的 setter 函数,当设置该属性的值时调用。
例如:
```javascript
const obj = {}
Object.defineProperty(obj, "name", {
value: "John",
writable: false,
configurable: false
})
console.log(obj.name) // "John"
obj.name = "Jane" // 不可写,将不会修改属性值
console.log(obj.name) // "John"
delete obj.name // 不可删除,将不会删除属性
console.log(obj.name) // "John"
```
在上面的例子中,我们使用 `Object.defineProperty()` 定义了一个名为 `name` 的属性,设置了它的值为 `"John"`,并且将它的可写性和可配置性都设置为 `false`,这意味着它的值不能被修改和删除。
Object.defineProperty()的修饰符有哪些
Object.defineProperty()的修饰符有以下几个:
1. value: 设置属性的值。
2. writable: 设置属性是否可写。如果为true,则属性的值可以被修改;如果为false,则属性的值不能被修改。
3. enumerable: 设置属性是否可枚举。如果为true,则属性可以通过for...in循环或Object.keys()方法遍历到;如果为false,则属性不能被遍历到。
4. configurable: 设置属性是否可配置。如果为true,则属性的描述符可以被修改或删除;如果为false,则属性的描述符不能被修改或删除。