文章正文第一句:“这是我参与更文挑战的第2天,活动详情查看: 更文挑战”
常用属性
数据属性
所谓数据属性就是对象的每一个属性名,数据属性都有四个特征,如下:
configurable:表示能否对该属性 进行配置,比如使用delete删除,能否修改属性特性等。默认为true
enumerable:表示是否能被枚举,比如是否可以用for-in循环获取属性,默认为true。
writable:表示是否可写,是否能修改属性的值。默认为true。
value:包含属性的数据值,默认为undefined。
可以使用object.getOwnPropertyDescriptor(person,name)
来获取指定的数据属性的描述。
访问器属性Object.defineProperty
访问器属性不包括数据值,他么包括一队getter和setter函数,通过定义访问器属性,可以实现设置一个属性的值会导致其他属性发生变化。
let person = {
name:"jack"
}
let temp = null;
Object.defineProperty(person,'name',{
get:function(){
console.log('被读取')
return temp;
},
set:function(val){
console.log('被设置')
temp = val
}
})
person.name = 'lucy';
console.log(person.name)
原型方法
Object.prototype.hasOwnProperty(‘属性名’)
此方法返回一个布尔值,表示这个对象中是否有这个属性。不会判断原型链上继承到的属性,类似Object.key(),不同于for in 。
Object.prototype.isPrototypeOf()
此方法主要是判断prototypeObj.isPrototypeOf(object)
,也就是判断对象prototypeObj是否在对象object的原型链上。也可以理解为对象object是否继承自对象prototypeObj。
**Object.prototype.toString()**方法返回一个表示该对象的字符串。可以用来检测对象类型。
对象方法
Object.assign(obj)
将一个对象的所有可枚举属性复制到一个新的对象中,是浅拷贝。
Object.entries(),key(),value()
返回给定对象的可遍历属性的键值对
这里有个重点需要注意一下就是Object.getOwnPropertyNames()
,Object.keys()
,for-in
都是可以获取到对象的属性的,但是他们是有区别的这里简单总结一下。
for in
:使用for..in循环时,返回的是所有能够通过对象访问的、可枚举的属性
,既包括存在于实例中的属性,也包括存在于原型中的属性。
Object.keys()
:用于获取对象自身所有的可枚举的属性值
,但不包括原型中的属性
,然后返回一个由属性名组成的数组
Object.getOwnPropertyNames()
:方法返回对象的所有自身属性的属性名
(包括不可枚举的属性
)组成的数组,但不会获取原型链上的属性
差异主要在属性是否可枚举
,是来自原型
,还是实例
。
object.getPrototypeOf(obj)
返回指定对象的原型
Object.setPrototypeOf()
方法设置一个指定的对象的原型为另一个对象或null。