ECMAScript 5+

我们可以在支持 ECMAScript 5+ 的浏览器中使用以下方法。
这些方法检测来自对象的值并避免在原型链上进行枚举:

let obj = {
  name: "Porter",
  age: 32
};
let keys = Object.keys(obj);
for (let i = 0; i < keys.length; i++) {
  let val = obj[keys[i]];
  console.log(val);
}

要使代码更紧凑,请使用 forEach:

let obj = {
  name: "Porter",
  age: 32
};
Object.keys(obj).forEach(function (key) {
  let val = obj[key];
  console.log(val);
});

以下方法构建一个包含对象值的数组:

let obj = {
  name: "Porter",
  age: 32
};
let values = Object.keys(obj).map(function (key) {
  return obj[key];
});
console.log(values);

为了使那些使用 Object.keys 的人对 null 安全,那么你可以运行:

let obj = {
  name: "Porter",
  age: 32
};
let values = Object.keys(obj || {}).map(function (key) {
  return obj[key];
});
console.log(values);

Object.keys 返回可枚举的属性。
使用 Object.keys 通常对迭代简单对象很有效。
如果你有一些不可枚举的属性可以使用,你可以使用:

Object.getOwnPropertyNames instead of Object.keys.

ECMAScript 2015+

该规范添加了 Object.values 和 Object.entries,它们都返回数组。

Object.values 可以与 for-of 循环一起使用:

let obj = {
  name: "Porter",
  age: 32
};
const values = Object.values(obj);
console.log(values);

如果你想同时使用键和值,那么你可以使用 Object.entries:

let obj = {
  name: "Porter",
  age: 32
};
for (const [key, val] of Object.entries(obj)) {
  console.log([key, val]);
}

Object.keys/values/entries 方法与 for..in 循环相似。
它们都忽略将 Symbol(...) 应用为键的属性。
当你需要符号时,你可以使用一个单独的方法 Object.getOwnPropertySymbols,它返回一个只包含符号键的数组。

如何获取 JavaScript 对象的所有属性值

在不知道键的情况下检测对象的所有属性值可以通过多种方式完成,具体取决于浏览器。

大多数浏览器都支持 ECMAScript 5 (ES5)。
我们来看看根据不同的规格,可以使用哪些方法来获取属性值。

ECMAScript 2014+ ( ES6)

使用 ECMAScript 2014 更容易迭代数组。
在循环中逐一处理值时,我们可以使用以下脚本:

let obj = {
  name: "Porter",
  age: 32
};
for (const key of Object.keys(obj)) {
  const val = obj[key];
  console.log(val);
}

使用 ECMAScript 2014 粗箭头函数并将对象映射到值数组可以成为单行代码:

let obj = {
  name: "Porter",
  age: 32
};
const vals = Object.keys(obj).map(key => obj[key]);
console.log(vals);

ECMAScript 2014 规范引入了 Symbol,其实例可用作属性名称。

我们可以使用 Object.getOwnPropertySymbols 来获取要枚举的对象的符号。
来自 ECMAScript 2014 的新 Reflect API 提供 Reflect.ownKeys 返回属性名称和符号列表。

对象值

这只是向对象添加了一个方法。
使用粗箭头函数可以是单行的:

Object.values = obj => Object.keys(obj).map(key => obj[key]);
//which you can now use like
//['one', 'two', 'three']
let values = Object.values({
  a: 'one',
  b: 'two',
  c: 'three'
});
console.log(values);

如果我们不想在本机 Object.values 存在时使用填充,则可以运行:

Object.values = Object.values || (obj => Object.keys(obj).map(key => obj[key]));
let values = Object.values({
  a: 'one',
  b: 'two',
  c: 'three'
});
console.log(values);
日期:2020-06-02 22:16:19 来源:oir作者:oir