Object.values() 语法
Object.values() 是 JavaScript 的一个静态方法,它会以 “数组的形式” 返回指定对象自身的可枚举属性对应的值。
语法:
Object.values(obj)说明:
Object.values() 方法接收单个参数。
obj(必选):表示要操作的对象。
对于 Object.values(),小伙伴们要清楚以下几点。
- Object.values() 只会返回字符串键属性的值,不包括 Symbol 属性的值。
- Object.values() 只会返回可枚举的属性的值。通过 Object.defineProperty() 设置为 enumerable: false 的属性的值将不会被返回。
- Object.values() 只会返回自身属性的值,不包括原型链上的继承属性。
Object.values() 摘要
| 属于 | JavaScript Object 对象 |
|---|---|
| 使用频率 | 中 |
| 官方文档 | 查看 |
| MDN | 查看 |
Object.values() 示例
接下来,我们通过几个简单的例子来讲解一下 Object.values() 方法是如何使用的。
示例 1:Object.values() 基本用法
const obj = {name: "Jack", age: 20};
console.log(Object.values(obj));运行结果如下。
[ 'Jack', 20 ]分析:
Object.values() 的参数不仅可以是 Object 对象,还可以是其他内置对象(Number、Array 等)。只不过参数为不同内置对象时,返回值也不同,请看下面几个例子。
示例 2:Object.values() 参数是一个数字
const num = 2077;
console.log(Object.values(num));运行结果如下。
[]分析:
当 Object.values() 参数是一个数字时,其返回值必定是一个空数组。
示例 3:Object.values() 参数是一个字符串
const str = "绿叶网";
console.log(Object.values(str));运行结果如下。
[ '绿', '叶', '网' ]分析:
当 Object.values() 参数是一个字符串时,字符串的每个字符都是数组的一个元素。
示例 4:Object.values() 参数是一个数组
const arr = ["Python", "C++", "Java"];
const result = Object.values(arr);
console.log(arr);
console.log(result);
console.log(arr === result);运行结果如下。
[ 'Python', 'C++', 'Java' ]
[ 'Python', 'C++', 'Java' ]
false分析:
当 Object.values() 参数是一个数组时,其返回值也是一个数组。虽然返回的数组与原数组的元素一样,但已经是两个不同的数组了。
注意: Object.values() 返回的新数组是浅拷贝。如果数组元素是对象(引用类型),新数组中的元素依然指向原来的对象。
示例 5:Object.values() 只会获取可枚举属性的值
const user = {
name: "Jack",
age: 20
};
// 添加一个不可枚举属性
Object.defineProperty(user, "id", {
value: "007",
enumerable: false
});
const values = Object.values(user);
console.log(values);运行结果如下。
[ 'Jack', 20 ]分析:
从结果可以看出,Object.values() 只会返回可枚举的自身属性(name、age)的值,而忽略了不可枚举属性(id)的值。
Object.keys()、Object.values()、Object.entries()
Object.keys()、Object.values()、Object.entries() 这 3 个是好基友关系,它们都是静态方法,只能供类名调用。三者之间的区别如下:
- Object.keys() 会返回一个数组,该数组包含对象所有的 “键”。
- Object.values() 会返回一个数组,该数组包含对象所有的 “值”。
- Object.entries() 会返回一个数组,该数组包含对象所有的 “键值对”。
