Object.entries()

这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。

Object.entries() 方法返回一个给定对象自己的可枚举属性[key,value]对的数组,数组中键值对的排列顺序和使用 for...in 循环遍历该对象时返回的顺序一致(区别在于一个for-in循环也枚举原型链中的属性)。

语法

Object.entries(obj)

参数

obj
返回该对象由可枚举属性名和对应属性值组成的的键值对。

返回值

一个给定对象自己的枚举属性[key,value]对的数组。

描述

Object.entries() 返回一个所有元素为键值对的数组,其中键值对来自于给定的对象上面可直接枚举属性的属性名与属性值,这些键值对的顺序以键(属性名)为参考,与手动遍历该对象属性时的一致。

示例

var obj = { foo: "bar", baz: 42 };
console.log(Object.entries(obj)); 
// [ ['foo', 'bar'], ['baz', 42] ]

// 类数组对象
var obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.entries(obj)); 
// [ ['0', 'a'], ['1', 'b'], ['2', 'c'] ]

// 带有随机(非顺序)排列属性名的类数组对象
var an_obj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.entries(an_obj)); 
// [ ['2', 'b'], ['7', 'c'], ['100', 'a'] ]

// getFoo是不可枚举属性
var my_obj = Object.create(
   {}, 
   { getFoo: { value: function() { return this.foo; } } }
);
my_obj.foo = "bar";
console.log(Object.entries(my_obj)); 
// [ ['foo', 'bar'] ]

// 非对象参数会被强行视为对象
console.log(Object.entries("foo")); 
// [ ['0', 'f'], ['1', 'o'], ['2', 'o'] ]

将Object转化为Map对象

new Map() 构造函数接受一个包含键值对元素的可迭代数组。 借助Object.entries方法你可以很容易的将Object转换为Map:

var obj = { foo: "bar", baz: 42 }; 
var map = new Map(Object.entries(obj));
console.log(map); // Map { foo: "bar", baz: 42 }

Polyfill

为了兼容那些原生不支持Object.entries方法的旧环境,你可以在tc39/proposal-object-values-entrieses-shims/Object.entries找到一些解决方案。

规范

规范名称 规范状态 备注
ECMAScript 2017 Draft (ECMA-262)
Object.entries
Draft 首次定义

浏览器兼容性

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support 51.0 [1] 47 (47) 未实现 未实现 未实现 [2]
Feature Android Android Webview Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile Chrome for Android
Basic support 未实现 51.0 [1] 47.0 (47) 未实现 未实现 未实现 51.0 [1]

[1] 开启标志位。

[2] 查看 bug 150131

相关链接

文档标签和贡献者

 此页面的贡献者: xgqfrms-GitHub, OshotOkill
 最后编辑者: xgqfrms-GitHub,