Object
数据属性包含四个特征:
1.configurable:表示能否对该属性进行配置,比如使用delete删除,能否修改属性特征等。默认为true。
2.enumerable:表示能否被枚举,比如是否可以用for-in循环获取属性,默认为true。
3.writeable:表示是否可写,是否能修改属性的值。默认为true。
4.value:包含属性的数据值,默认为undefined。
访问器属性包含四个特征
1.get:读取属性时
2.set:设置属性时
3.configurable:表示能否通过delete删除此属性,能否修改属性的特征,或能否修改把属性修改为访问器属性,默认为true
4.enumber:表示该属性是否可枚举,即是否通过for-in循环或Object.keys()返回属性,默认为true
//设置对象属性的静态参数
Object.defineProperty(obj, 'a', {
value:123,
writable:true,
configurable: true,
enumerable: false,
})
//设置对象属性的访问器参数
Object.defineProperty(obj, 'a', {
get: () => {
//这里不能使用this.a来访问属性a。会造成死循环
//a认为是当前访问器内的局部变量
return a;
},
//obj.a = 456;
//n 就是接收456的
set: (n) => {
a = n;
},
configurable: true,
enumerable: false,
})
//一次设置多个属性
Object.defineProperties(obj,{
'a':{},
'b':{}
})
defineProperty设置对象的属性时,如果设置为访问器,则不能同时设置静态属性。
defineProperty设置属性或访问器时,除了get、set之外,其他的属性默认是false。
//此时没有设置configurable、enumerable、writable默认值都是false
Object.definePropertie(obj,'a' {
value: 1
})
对象方法
var a = { a: 1, b: 2 };
var b = { b: 4, c: 5 };
var c = Object.assign(a, b)
console.log(
a === c//true,assign方法会直接修改a,并且返回值就是a
)
//assign方法,通常用来做对象的合并或克隆
var obj = { a: 1, b: 2 };
// 浅拷贝
var obj2 = Object.assign({}, obj);
//深拷贝
var obj2 = JSON.parse(JSO