特性
值
value:
可修改性
writable: boolean
可枚举性
enumerable: boolean
可配置性
configurible: boolean
特性方法
get()
set()
定义特性的方法:
Object.defineProperty()
var obj = {
color: "red",
width: 100
}
Object.defineProperty(obj, "color", {
// 修改可枚举性
enumerable: false
})
定义多个特性的方法:
Object.defineProperties()
var obj = {
color: "red",
num: 100
}
// 设置color和num的特性
Object.defineProperties(obj, {
color: {
value: "blue",
writable: false,
enumerable: false
},
num: {
get: function() {
return this._num;
},
set: function(value) {
this._num = value;
},
enumerable: false,
// 一旦设置了特性方法(get或者是set)将不能再次设置 value 和 writable
// writable: false
value: 300
}
})
对象扩展
Object.preventExtensions(obj)
取消了对象的可拓展性之后: 不能添加属性,但是仍然可以删除属性,修改属性值。
查看对象的可拓展性:
Object.isExtensible() 返回 true| false
Object.seal(obj)
当封闭对象之后, 对象可以被访问,可以修改属性, 不可以新增属性、不可以删除属性。
查看对象是否被封闭:
Object.isSealed(obj) 返回true|false
Object.freeze(obj)
当对象冻结之后, 可以被访问, 不可以新增、 不可以删除、 不可以修改。
查看对象是否冻结:
Object.isFrozen(obj) 返回 true | false
对象的深复制(深拷贝)
第一种方法:
var obj = {
name: 'lisi',
age: 20,
dosomething() {
console.log('hello');
}
}
var obj1 = JSON.parse(JSON.stringify(obj));
console.log(obj === obj1); // false
第二种方法:
var obj = {
name: 'lisi',
age: 20,
dosomething() {
console.log('hello');
}
}
var obj1 = {};
Object.assign(obj1, obj);
console.log(obj === obj1); // false
判断空对象的方法
var obj = {};
console.log(Object.keys(obj).length === 0); // true