第一种方法:
Object.values(obj)
示例:
var obj = { name: '小明', age: 22 };
console.log( Object.values(obj) ); // ['小明', 22]
第二种方法:
for-in循环
示例:
var obj = { name: '小明', age: 22 };
var arr = [];
for(let i in obj) {
arr.push (obj[i] ) //
}
console.log(arr); // ['小明', 22]
相同点
- 都可以将对象转化为数组;
- 返回值都可以是对象的属性值;
- 也都可以将字符串转化为数组。(示例1的最后一条打印)
区别
- for-in 循环可以枚举原型链中的属性,而Object.values(obj)不可以。(示例1);
- for- in 的返回值可以是对象的属性名(键名)和属性值,而Object.values(obj)只返回属性值。(示例2)
示例1:
var obj = { name: '小明', age: 22 };
obj.__proto__.sex = '男'; //往原型链上插入一条属性
var arr = [];
for(let i in obj) {
arr.push (obj[i] ) //
}
console.log(arr); // ['小明', 22, '男']
cosole.log(Object.values(obj)); // ['小明', 22]
cosole.log(Object.values(‘abc’)); // ['a, 'b', 'c']
示例2:
var obj = { name: '小明', age: 22 };
var arr = [];
for(let i in obj) {
// arr.push (obj[i] ) //返回属性值
arr.push (i) //返回键名
}
console.log(arr); // ['name', 22]
cosole.log(Object.values(obj)); // ['小明', 22]
总结
这两种方法都可以将对象转化为数组,如果只是简单转换,Object.values(obj)更加简洁,如果想获取键名和原型链上的属性值,就可以用for- in循环。
| 返回值 | 是否能获取原型链上的属性 |
---|
Object.values(obj) | 只返回对象的值 | 否 | for-in循环 | 可返回对象的键名和值 | 是 |
|