海北藏族自治州网站建设_网站建设公司_Logo设计_seo优化
2026/1/22 16:32:12 网站建设 项目流程

for in

主要用于遍历对象的可枚举属性,包括自有属性、继承自原型的属性

 

Object.keys

此方法返回一个数组,元素均为对象自有可枚举的属性

Object.keys主要用于遍历对象自有的可枚举属性,不包括继承自原型的属性和不可枚举的属性

const enumObj = {title: '文章1',code: 'WZ22134',type: '文学类'
};// 获取枚举的属性名
const propertyNames = Object.keys(enumObj);
console.log(propertyNames); // ['title', 'code', 'type']

 

Object.getOwnPropertyNames

主要用于返回对象的自有属性,包括可枚举和不可枚举(字符串类型的属性名非Symbol)的属性,不包括继承自原型的属性 

const obj = { [Symbol('a')]: 1, b: 2 };
console.log(Object.getOwnPropertyNames(obj)); // ['b']

 

Object.getOwnPropertySymbols()遍历Symbol属性

Symbol

Object.getOwnPropertySymbols()可以获取指定对象的所有Symbol属性名

const obj = { [Symbol('a')]: 1, b: 2 };
console.log(Object.getOwnPropertySymbols(obj)); // [Symbol(a)]

 

Reflect.ownKeys

const obj = { [Symbol('a')]: 1, b: 2 };
console.log(Reflect.ownKeys(obj));              // ['b', Symbol(a)]

 

 差异

方法  属性名类型要求 可枚举性要求
Object.keys() 仅字符串 仅可枚举
Object.getOwnPropertyNames() 仅字符串 可枚举 + 不可枚举
Object.getOwnPropertySymbols() 仅 Symbol 可枚举 + 不可枚举
Reflect.ownKeys() 字符串 + Symbol 可枚举 + 不可枚举

 

 

 

 

 

 

属性定义的几种情况

 

const sym = Symbol('sym');
const sym2 = Symbol('enumerableSym');
const obj = {};// 添加字符串可枚举属性
obj.enumerableProp = '可枚举';// 添加字符串不可枚举属性
Object.defineProperty(obj, 'nonEnumerableProp', {value: '不可枚举',enumerable: false  // 关键:设置为不可枚举
});// 添加 不可枚举Symbol 属性
Object.defineProperty(obj, sym, {value: 'Symbol属性',enumerable: false
});// 添加一个可枚举的 Symbol 属性
Object.defineProperty(obj, sym2, {value: '可枚举的Symbol',enumerable: true  // 明确设置为可枚举
});

 

注:Symbol默认是可枚举的

 

对象的每个属性都有一个描述对象(Descriptor),用来控制该属性的行为。

描述信息:

{value: '属性的值',        // 属性值writable: true/false,     // 是否可修改enumerable: true/false,   // 是否可枚举configurable: true/false  // 是否可删除或修改描述符
}

 

Object.getOwnPropertyDescriptor()方法可以获取该属性的描述对象。

const obj = { name: 'Alice' };
const descriptor = Object.getOwnPropertyDescriptor(obj, 'name');console.log(descriptor);
// {
//   value: 'Alice',
//   writable: true,
//   enumerable: true,
//   configurable: true
// }

 Object.getOwnPropertyDescriptors()方法可以获取该对象所有属性的描述符对象集合

 

 

描述对象的enumerable属性,称为“可枚举性”,如果该属性为false,就表示某些操作会忽略当前属性。

目前,有四个操作会忽略enumerable为false的属性。如下:

  • for...in循环:只遍历对象自身的和继承的可枚举的属性。
  • Object.keys():返回对象自身的所有可枚举的属性的键名。
  • JSON.stringify():只串行化对象自身的可枚举的属性。
  • Object.assign(): 忽略enumerable为false的属性,只拷贝对象自身的可枚举的属性

 

方法 属性名类型要求 可枚举性要求 原型链
for...in 字符串 可枚举 原型链(继承可枚举属性)
JSON.stringify() 字符串 可枚举 自身
Object.assign() 字符串+Symbol 可枚举 自身

 

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询