367 字
1 分钟
JS获取对象的属性个数
现有以下对象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; // 5Object.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 方法,该方法返回创建的对象
获取结果的各属性释义
- configurable:表示能否通过delete删除此属性,能否修改属性的特性,或能否修改把属性修改为访问器属性,如果直接使用字面量定义对象,默认值为true
- enumerable: 表示该属性是否可枚举,即是否通过for-in循环或Object.keys()返回属性,如果直接使用字面量定义对象,默认值为true
- writable: 能否修改属性的值,如果直接使用字面量定义对象,默认值为true
- 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获取对象的属性个数/ 部分信息可能已经过时
相关文章 智能推荐