Object.values()

Object.values() 方法返回一个给定对象自身的所有可枚举属性值的数组,值得顺序与使用for…in 循环的顺序相同。(区别在于 for in 循环会枚举原型链中的属性)

  1. var obj = { foo: 'bar', baz: 42 };
  2. console.log(Object.values(obj)); // ['bar', 42]
  3. // array like object with random key ordering
  4. // when we use numeric keys, the value returned in a numerical order according to the keys
  5. var an_obj = { 100: 'a', 2: 'b', 7: 'c' };
  6. console.log(Object.values(an_obj)); // ['b', 'c', 'a']
  7. // non-object argument will be coerced to an object
  8. console.log(Object.values('foo')); // ['f', 'o', 'o']

Object.keys()

Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致。

  1. // simple array
  2. var arr = ['a', 'b', 'c'];
  3. console.log(Object.keys(arr)); // console: ['0', '1', '2']
  4. // array like object
  5. var obj = { 0: 'a', 1: 'b', 2: 'c' };
  6. console.log(Object.keys(obj)); // console: ['0', '1', '2']
  7. // array like object with random key ordering
  8. var anObj = { 100: 'a', 2: 'b', 7: 'c' };
  9. console.log(Object.keys(anObj)); // console: ['2', '7', '100']

Object.entries()

Object.entries() 方法返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环还会枚举原型链中的属性)

  1. const obj = { foo: 'bar', baz: 42 };
  2. console.log(Object.entries(obj)); // [ ['foo', 'bar'], ['baz', 42] ]
  3. // array like object with random key ordering
  4. const anObj = { 100: 'a', 2: 'b', 7: 'c' };
  5. console.log(Object.entries(anObj)); // [ ['2', 'b'], ['7', 'c'], ['100', 'a'] ]
  6. // iterate through key-value gracefully
  7. const obj = { a: 5, b: 7, c: 9 };
  8. for (const [key, value] of Object.entries(obj)) {
  9. console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"
  10. }
  11. // Or, using array extras
  12. Object.entries(obj).forEach(([key, value]) => {
  13. console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"
  14. });