JavaScript中的对象属性相关知识点总结

这是我参与更文挑战的第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
})
复制代码

5016475-9cd41a36735b667d.webp

其他关于属性的方法

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
喜欢就支持一下吧
点赞0 分享