当前位置: 首页 > news >正文

JS 遍历枚举

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 可枚举 自身

 

http://www.jsqmd.com/news/284800/

相关文章:

  • 二阶压控电压源低通滤波器
  • 多用信号发生器设计
  • 株洲醴陵攸县茶陵炎陵株洲云龙英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜
  • 2026年AI编程的分水岭:为什么懂Agent Skills的人已经赢了?
  • 2026 雅思网课辅导机构口碑排行榜:权威深度测评,高性价比提分方案推荐
  • 干货分享|深度学习计算的FPGA优化思路
  • 电阻炉温度控制系统
  • 2026最新Selenium面试题(附带答案),建议收藏备用
  • 光刻胶用抗氧剂β-(3,5-二叔丁基-4-羟基苯基)丙酸十八碳醇酯
  • USACO历年白银组真题解析 | 2005年1月
  • 在吴忠,遇见你的羽毛球引路人:韩宁波教练与码上俱乐部
  • 论文质量提升方案:人工智能翻译与写作优化工具推荐
  • SAP赋能新未来:携手哲讯科技,共绘企业数字化转型蓝图
  • 在吴忠,有一位很会教羽毛球的韩教练
  • 超详细的单元测试总结
  • 如何判断一个B2B平台开发服务商是否专业?商联达告诉你
  • 在吴忠码上俱乐部,遇见你的羽球引路人
  • 什么是DDOS攻击?以及如何防御DDOS攻击
  • PHP 基础案例教程之 02-PHP 语法基础
  • 2025年数据恢复软件免费版最真实推荐—— 18年老工程师深度评测
  • 力扣337 打家劫舍 III java实现
  • 不同类型的代理服务器解析
  • Vue.js 前端开发实战之 04-Vue 开发基础(3)
  • 红队工具箱:进攻性安全运营的必备工具与技术
  • AMAT 0270-20268
  • 如何判断B2B平台开发服务商的技术硬实力?
  • 学霸同款2026 TOP10 AI论文写作软件:自考毕业论文全攻略
  • 【AI避坑指南】pdfQA基准:表格成“拦路虎“,GPT-120B也栽跟头,大模型开发必看!
  • XSS 攻击(详细) 攻击类型、攻击技巧、攻击工具与平台、防御方法
  • 那些让你头疼的外部群推送难题,真相其实是这样的