mobile wallpaper 1
mobile wallpaper 2
mobile wallpaper 3
mobile wallpaper 4
367 字
1 分钟
JS获取对象的属性个数
2020-05-28

现有以下对象obj

const obj = {
id: 1,
key: 111,
name: '名字',
label: '标签',
value: 'wdnmd'
};

Object.keys#

es5中新增的方法,用来获取对象自身可枚举的属性键,组成一个数组

const objKeyList = Object.keys(obj); // ['id', 'key', 'name', 'label', 'value']
objKeyList.length; // 5

Object.getOwnPropertyNames#

是es5中新增的方法,用来获取对象自身的全部属性名,组成一个数组

const objKeyList = Object.getOwnPropertyNames(obj); // ['id', 'key', 'name', 'label', 'value']
objKeyList.length; //5

什么是可枚举属性#

对象的每一个属性都有一个描述对象,用来描述和控制该属性的行为,使用Object.getOwnPropertyDescriptor 方法来获取该描述对象,同样是针对上面的对象 obj,如下

Object.getOwnPropertyDescriptor(obj, 'name')
// 结果:{ value: '名字', writable: true, enumerable: true, configurable: true }

上面方法仅为获取,如需设置描述对象则需使用 Object.defineProperty 方法,该方法返回创建的对象

获取结果的各属性释义

  1. configurable:表示能否通过delete删除此属性,能否修改属性的特性,或能否修改把属性修改为访问器属性,如果直接使用字面量定义对象,默认值为true
  2. enumerable: 表示该属性是否可枚举,即是否通过for-in循环或Object.keys()返回属性,如果直接使用字面量定义对象,默认值为true
  3. writable: 能否修改属性的值,如果直接使用字面量定义对象,默认值为true
  4. value: 该属性对应的值,默认为undefined

方便加深理解及 defineProperty 的使用,参考如下代码

let testObj = {};
Object.defineProperties(testObj, {
name: {
value: '稀音',
enumerable: false, // 不可枚举
},
age: {
value: 14,
enumerable: true, // 可枚举
}
})
// for in 循环测试
for (let key in testObj) {
console.log("key:" + key + ', ' + 'value:' + testObj[key])
} // key:age, value:14,仅打印了age
// 直接打印
console.log(testObj) // {age: 14, name: "稀音"} 此处 name 在浏览器 console 中为淡红色

不可枚举的属性在浏览器 console 中为淡红色,如下图 不可枚举属性的淡红色标注

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

JS获取对象的属性个数
https://marrydream.top/posts/web前端/js获取对象的属性个数/
作者
茉铃
发布于
2020-05-28
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录