最常用且标准的方法是 object.entries(),它返回二维数组,每个子数组为[key, value],仅包含对象自身可枚举字符串键,不包括 symbol 键、不可枚举属性及原型链属性。

在 JavaScript 中,获取对象所有键值对的数组,最常用且标准的方法是使用 Object.entries()。
用 Object.entries() 获取键值对数组
该方法返回一个二维数组,每个子数组包含一个 [key, value] 对,顺序与 for...in 遍历一致(即按属性定义顺序,对普通对象基本等同于插入顺序)。
- 只遍历对象自身的可枚举属性,不包括原型链上的属性
- 键始终为字符串(即使原 key 是 Symbol 或数字,也会被转为字符串;但注意:Symbol 键不会被包含)
- 不处理不可枚举属性(如通过
Object.defineProperty设置enumerable: false的属性)
示例:
const obj = { a: 1, b: 2, c: 3 };console.log(Object.entries(obj)); // [['a', 1], ['b', 2], ['c', 3]]
想包含 Symbol 键?需手动合并
Object.entries() 忽略 Symbol 类型的键。若需完整键值对(含 Symbol),可结合 Object.getOwnPropertySymbols() 和 Object.entries():
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 先用
Object.entries(obj)获取字符串键的键值对 - 再用
Object.getOwnPropertySymbols(obj)获取 Symbol 键数组 - 遍历 Symbol 键,用
obj[sym]取值,推入结果数组
简写示例:
const allEntries = [...Object.entries(obj), ...Object.getOwnPropertySymbols(obj).map(sym => [sym, obj[sym]])];需要包含原型链或不可枚举属性?慎用
标准方法不覆盖这些情况。如确有特殊需求:
- 要含原型链属性 → 可用
for...in+hasOwnProperty手动收集(但无法区分枚举性,且仍不包含 Symbol) - 要含不可枚举自身属性 → 用
Object.getOwnPropertyNames()+Object.getOwnPropertySymbols(),再逐个取值 - 注意:这类操作非常规,通常意味着设计上应重新考虑数据结构或访问方式
兼容性与替代写法
Object.entries() 在现代浏览器和 Node.js(≥ v7.0)中均支持。若需兼容旧环境(如 IE):
- 可用 polyfill,或手动遍历
Object.keys(obj)构造:
该写法等效于 Object.entries() 对字符串键的行为,但更轻量、兼容性更好。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










