JavaScript遍历对象的核心区别在于是否遍历自身属性、是否包含不可枚举属性、是否支持Symbol键及是否保持插入顺序:1. for...in遍历自身及原型链可枚举属性,需hasOwnProperty过滤;2. Object.keys()仅返回自有可枚举字符串键;3. Object.getOwnPropertyNames()与getOwnPropertySymbols()组合可获取全部自有键(含不可枚举和Symbol);4. Reflect.ownKeys()是ES2015推荐的统一方案,返回所有自有键且保持定义顺序。
JavaScript 遍历对象有多种方式,核心区别在于:是否遍历自身属性、是否包含不可枚举属性、是否支持 Symbol 类型键、是否保持插入顺序。选哪种取决于你要处理的属性类型和兼容性要求。
这是最传统的遍历方式,但它会遍历对象自身及原型链上所有可枚举属性。实际使用中通常要过滤掉继承属性:
Object.defineProperty(obj, 'x', { enumerable: false }) 定义的属性会被跳过)Object.keys(obj) 返回一个由对象自身可枚举属性的字符串键组成的数组,再配合数组方法遍历:
若需同时处理字符串键和 Symbol 键,且包括不可枚举属性,可组合使用:
Reflect.ownKeys(obj) 是 ES2015 引入的统一方案,等价于:
[...Object.getOwnPropertyNames(obj), ...Object.getOwnPropertySymbols(obj)]
晰,代码简洁,是现代开发中的首选之一