创建对象
var obj={};
var obj=new Object();
var obj=Object.create(Object.prototype); //Object.create() 为ES5新增
var obj=Object.create(Object.prototype,<属性描述符列表>);
<属性描述符列表>格式:{
prop1: <属性描述符1>,
prop2: <属性描述符2>,
...
}
属性描述符可以是:{
value:<value>,
writable:[true|false],
enumerable:[true|false],
configurable:[true|false]
} 或 {
get: function() {},
set: function() {},
enumerable:[true|false],
configurable:[true|false]
}
删除属性
delete obj.property;
delete obj['property'];
检测属性
'property' in obj; //检测属性是否存在
obj.hasOwnProperty('property'); //检测该属性是否为自有属性(非继承而来)
obj.propertyIsEnumerable('property'); //ES5新增,检测属性是否为自有属性,且可枚举
Object.getOwnPropertyDescriptor(obj, 'property') //ES5新增,获取对象obj的属性property的属性描述符
设置属性
obj.property=value;
obj['property']=value;
obj={
prop1: value1,
prop2: value2,
//getter和setter为ES5新增
get prop3() {
return somevalue;
},
set prop3(value) {
//process and save value
}
};
配置属性的特性,ES5新增
Object.defineProperty(obj,'property',<属性描述符>);
obj的属性会被定义,同时返回obj
例如:
Object.defineProperty(obj,'property',{value:'value', writable:true, enumerable:true, configurable:true});
Object.defineProperty(obj,'property',{get:function(){}, set:function(){}, enumerable:true, configurable:true});
批量配置属性特性
Object.defineProperties(obj,<属性描述符列表>);
//obj的属性会被设置,同时返回obj
枚举属性
for(property in obj) { console.log(property); } //只能列出可枚举属性
Object.keys(obj); //ES5新增,返回属性名数组,只能列出自有属性,只能列出可枚举属性
Object.getOwnPropertyNames(obj); //ES5新增,返回属性名数组,只能列出自有属性,列出的属性包括不可枚举属性
修改对象可扩展性,ES5新增
Object.preventExtensions(obj); //阻止对象扩展,不能添加新属性
Object.isExtensible(obj); //检测对象是否可扩展
Object.seal(obj); //封闭对象,除了不能扩展,还不能配置属性特性,但可写属性依然可以赋值
Object.isSealed(obj); //检测对象是否封闭的
Object.freeze(obj); //冻结对象,除了封闭对象,所有属性都配置为只读
Object.isFrozen(obj); //检测对象是否冻结的