这篇文章需要文法复核。如何帮忙。
这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。
Object.entries方法返回一个包含由给定对象所有可枚举属性的属性名和属性值组成的 [属性名,属性值] 键值对的数组,数组中键值对的排列顺序和使用for...in
循环遍历该对象时返回的顺序一致(两者的主要区别是 for-in 还会遍历出一个对象从其原型链上继承到的可枚举属性)。
语法
Object.entries(obj)
参数
obj
- 返回该对象由可枚举属性名和对应属性值组成的的键值对。
描述
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-entries或es-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。