这是我参与更文挑战的第8天,活动详情查看: 更文挑战
遍历对象可枚举属性方式
for in
使用 for in 循环遍历对象的属性时,原型链上的所有可枚举的属性都将被访问。
Object.prototype.name="lf";
let person ={ age: 18 };
for (var key in person) {
console.log(key, person[key]);
}
//age:18
//name:lf
//hasOwnProperty只遍历对象自身的属性,而不遍历继承于原型链上的属性,可使用hasOwnProperty方法过滤。
Object.prototype.name="lf";
let person ={ age: 18 };
for (var key in person) {
if(person.hasOwnProperty(key)){
console.log(key, person[key]);
}
}
//age:18
复制代码
Object.keys()
Object.keys()方法会返回一个由给定对象的自身可枚举属性组成的数组
Object.prototype.name="lf";
let person ={ age: 18 };
let list = Object.keys(person)
//["age"]
复制代码
可以通过Object.keys(person).length,来获取对象的属性个数
JSON.stringify()
Object.prototype.name="lf";
let person ={ age: 18 };
let list = JSON.stringify(person)
//"{ "age" : 18 }"
复制代码
定义对象属性
Object.defineProperty(obj, prop, desc)
有两种形式,且不能混合使用,分别为数据描述符形式,存取描述符形式。
数据描述符形式
let person = {}
Object.defineProperty(person, "name", {
value: "lf",
enumerable: true,
writable:true
});
复制代码
存取描述符形式
let Person = {}
Object.defineProperty(Person, 'name', {
get: function () {
return this.value
},
set: function (newVal) {
this.value = newVal
},
configrable:true,
enumerable:true
})
复制代码
其他关于属性的方法
Object.preventExtensions()
禁止一个对象添加新属性并且保留已有属性。
Object.seal()
密封对象,等同于object.preventExtensions(…) + configurable:false。
Object.freeze()
冻结对象,等同于object.preventExtensions(…) + configurable:false + writable: false。
Object.defineProperties()
批量定制对象属性。
var obj = {}
Object.defineProperties(obj, {
name: {
value: ‘John‘,
writable: true
},
age: {
value: 30,
enmuerable: true
}
})
复制代码
Object.getOwnPropertyDescriptor()
返回该对象某属性的描述器。
var obj = {}
Object.defineProperty(obj, ‘name‘, {
value: ‘Backus‘,
writable: true,
enumerable: true
})
var des = Object.getOwnPropertyDescriptor(obj, ‘name‘)
console.log(des)
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END