1. 描述
Object.keys()
返回一个所有元素为字符串的数组,其元素来自给定的object
上面可直接枚举的属性。这些属性的顺序与手动遍历该对象属性时的一致。
1.1 语法
Object.keys(obj)
参数:
obj
:要返回其枚举自身属性的对象
1.2 返回值
一个表示给定对象的所有可枚举属性的字符串数组
2. 应用
2.1 范例
- 简单数组
const arr = ['a', 'b', 'c', 'd'];
console.log(Object.keys(arr)); // 输出 ['0', '1', '2', '3']
- 类数组对象
const arr = {
1: 'a', 2: 'b', 3: 'c', 4: 'd' };
console.log(Object.keys(arr)); // 输出 ['1', '2', '3', '4']
- 具有随机键顺序的类数组对象
const arr = {
112: 'a', 23: 'b', 3: 'c', 43: 'd' };
console.log(Object.keys(arr)); // 输出 ['3', '23', '43', '112']
const arr = {
a: 'a', d: 'b', c: 'c', b: 'd' };
console.log(Object.keys(arr)); // 输出 ['a', 'd', 'c', 'b']
- 遇不可枚举属性
const myObj = Object.create(
{
},
{
getFoo: {
value() {
return this.foo;
},
},
}
);
myObj.a = 1;
console.log(Object.keys(myObj)); // 输出 ['a']
2.2 遍历对象属性
const obj = {
a: 1, b: 3, c: 5 };
Object.keys(obj).map((key) => {
console.log('key:' + key + ',value:' + obj[key]);
// 依次输出
// key:a,value:1
// key:b,value:3
// key:c,value:5
});
2.3 删除不符条件的对象属性
const obj = {
a: 1, b: 3, c: 5, d: 7 };
Object.keys(obj).map((key) => {
obj[key] < 4 ? delete obj[key] : '';
});
console.log(obj); // 输出 {c: 5, d: 7}
2.4 重赋数组对象中不符条件的对象属性
const arr = [
{
id: 1, value: 100, key: undefined },
{
id: 2, value: null, key: undefined },
{
id: 3, value: undefined, key: null },
];
arr.map((obj) => {
Object.keys(obj).map((key) => {
Boolean(obj[key])
? ''
: key === 'value'
? (obj[key] = 0)
: (obj[key] = '');
});
});
console.log(arr);
// 输出
/* [
{
"id": 1,
"value": 100,
"key": ""
},
{
"id": 2,
"value": 0,
"key": ""
},
{
"id": 3,
"value": 0,
"key": ""
}
] */
2.5 注意
console.log(Object.keys('abc')); // 输出 ['0', '1', '2']
在
ES5
里,如果此方法的参数不是对象(而是一个原始值),那么它会抛出TypeError
在
ES2015
中,非对象的参数将被强制转换为一个对象。
Object.keys
还有诸多与其它方法联用的应用,熟悉它,相信你在逻辑处理过程中能够广泛应用到