JS 遍历枚举

news/2026/1/22 16:34:57/文章来源:https://www.cnblogs.com/sugarwxx/p/17987704

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.mzph.cn/news/1200914.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

陀螺工具定向短节怎么做到又小又便宜?

在石油钻井、地质勘探和定向钻进等精密工业领域,精确测量井下工具的方位角、井斜角和工具面角至关重要。传统的陀螺工具虽精度卓越,但往往体积庞大、结构复杂且价格高昂,限制了其广泛应用。近年来,MEMS技术,催生出新一…

多用信号发生器设计

第2章 理论概述 2.1信号发生器的设计方案 函数信号发生器是是由基础的非正弦信号发生电路和正弦波形发生电路组合而成。下面我们将分别对各个波形的发生进行分析,并且提出几种方案,从而达到在合成电路时使电路更加合理。 方案一:用分立元件组…

株洲醴陵攸县茶陵炎陵株洲云龙英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜

结合英国文化教育协会最新数据及本地考生备考调研,雅思考试因题型灵活、评分严谨,成为众多留学申请者的备考难点。在株洲及醴陵、攸县、茶陵、炎陵、株洲云龙等区域,雅思培训市场良莠不齐,考生及家长在选课过程中常…

干货分享|深度学习计算的FPGA优化思路

FPGA优化深度学习计算主要包括计算资源调度、数据搬移优化、低比特量化和算子融合,通过流水线并行、片上存储优化和自适应数据流管理提升计算效率。本节将深入分析深度学习计算在FPGA上的优化策略,探讨其算子级、模型级和系统级的加速方案,以…

2026年AI编程的分水岭:为什么懂Agent Skills的人已经赢了?

2026年AI编程的分水岭:为什么懂Agent Skills的人已经赢了? 最近技术圈里关于 Agent Skills 的讨论热度很高。有人说这是 AI 编程真正开始工程化的标志,也有人觉得这不过是换了个马甲的复杂提示词模板。 在我看来,Agent Skills 或许真的是 2026 年最值…

2026 雅思网课辅导机构口碑排行榜:权威深度测评,高性价比提分方案推荐

在雅思备考赛道中,考生普遍面临 “选课难、提分慢、适配差” 三大核心痛点:基础薄弱者找不到精准入门路径,高分冲刺党缺乏针对性技巧打磨,留学规划迷茫者难以兼顾语言培训与院校申请,在职人士更是苦于平衡学习与工…

电阻炉温度控制系统

二.温度控制系统的组成框图 采用典型的反馈式温度控制系统,组成部分见下图。其中数字控制器的功能由微型机算机实现。 图中由420mA变送器,I/V,A/D转换器构成输入通道,用于采集炉内的温度信号。其中,变送器选…

2026最新Selenium面试题(附带答案),建议收藏备用

一.你在TestNG中使用了哪些注解? TestBeforeSuiteAfterSuiteBeforeTestAfterTestBeforeClassAfterClassBeforeMethodAfterMethod 二.如何从Excel中读取数据? FileInputStream fs new FileInputStream(“excel文件路径”); Workbook wb WorkbookFact…

USACO历年白银组真题解析 | 2005年1月

​欢迎大家订阅我的专栏:算法题解:C++与Python实现! 本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战! 专栏特色 1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的…

光刻胶用抗氧剂β-(3,5-二叔丁基-4-羟基苯基)丙酸十八碳醇酯

抗氧剂1076分子式1 合成技术与方法抗氧剂1076的合成主要以酯交换反应为核心路径,即由3,5-二叔丁基-4-羟基苯基丙酸甲酯(简称3,5甲酯)与十八碳醇在催化剂作用下反应制得。1.1 传统两步法工业合成:首先通过加成反应制备中间体3,5甲酯…

在吴忠,遇见你的羽毛球引路人:韩宁波教练与码上俱乐部

在吴忠,遇见你的羽毛球引路人:韩宁波教练与码上俱乐部在吴忠,如果你对羽毛球怀有热情,渴望得到系统而有效的指导,那么“吴忠码上羽毛球俱乐部”的国家二级运动员韩宁波教练,或许正是你在寻找的那位引路人。…

论文质量提升方案:人工智能翻译与写作优化工具推荐

�� 8款英文论文AI写作工具核心对比 工具名称 核心功能 处理速度 适合场景 独特优势 aibiye 降AIGC率查重 20分钟 学术论文优化 适配知网/维普检测规则 aicheck AIGC检测降重 20分钟 AI生成内容处理 双重检测降重一体化 askpaper 学术风格…

在吴忠,有一位很会教羽毛球的韩教练

在吴忠,有一位很会教羽毛球的韩教练在吴忠码上羽毛球俱乐部里,国家二级运动员韩宁波教练的教学有些特别:当学员回球偏离预期时,他的球总能落到学员最舒服的位置;复杂的羽毛球技巧被他转化为“踩着音乐节拍跳华尔兹”这…

SAP赋能新未来:携手哲讯科技,共绘企业数字化转型蓝图

在数字经济浪潮席卷全球的今天,企业正面临着前所未有的机遇与挑战。如何通过数字化转型实现降本增效、提升核心竞争力,已成为企业持续发展的关键课题。作为全球领先的企业管理软件解决方案提供商,SAP以其全面的产品…

超详细的单元测试总结

一、何为单测 测试有黑盒测试和白盒测试之分,黑盒测试顾名思义就是我们不了解盒子的内部结构,我们通过文档或者对该功能的理解,指定了相应的输入参数,然后判断得出的结果是否正确。普通的用户、开发、QA都可以进行黑盒测试。 白…

如何判断一个B2B平台开发服务商是否专业?商联达告诉你

判断 B2B 平台开发服务商是否专业,核心看技术硬实力、行业深耕度、项目交付与服务体系、安全合规能力及可持续发展潜力,商联达结合 12 年产业互联网实战经验,为你拆解可落地的评估标准与验证方法。一、技术硬实力:稳定、先进、可扩…

在吴忠码上俱乐部,遇见你的羽球引路人

在吴忠,有一处备受羽毛球爱好者青睐的活力空间——吴忠码上羽毛球俱乐部。这里,不仅是挥洒汗水的球场,更是一个在专业指导下,系统感受羽毛球魅力、共同成长的社区。俱乐部的核心教练韩宁波,以其国家二级运动员的专业背…

什么是DDOS攻击?以及如何防御DDOS攻击

什么是DDOS攻击? 所谓的 DDoS 攻击,全称是 Distributed Denial of Service,翻译成中文就是分布式拒绝服务。一般来说是指攻击者利用“肉鸡”对目标网站在较短的时间内发起大量请求,大规模消耗目标网站的主机资源,让它…

PHP 基础案例教程之 02-PHP 语法基础

基本语法 PHP 标记 PHP 代码可以嵌入 HTML 中使用&#xff0c;为了区分 PHP 代码和 HTML 代码&#xff0c;需要使用 PHP 标记对 PHP 代码进行标识&#xff0c;PHP 的标记分为标准标记和短标记。 PHP 标记的基本用法&#xff1a; <?php 代码块 ?> <? 代码块 ?&…

2025年数据恢复软件免费版最真实推荐—— 18年老工程师深度评测

大家好&#xff0c;我是做了18年数据恢复的工程师&#xff0c;每天都在和各种丢失数据打交道。免费软件到底能不能救数据&#xff1f;我的结论是&#xff1a;能&#xff0c;但极其有限。绝大多数情况下&#xff0c;免费版只能救“轻度丢失”&#xff0c;真正严重的情况&#xf…