深入理解对象-定义属性
数据属性特性
Configurable
表示是否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性(属性直接定义在对象中,默认为true)。 当为false时,不能重新定义不能使用delete删除
Enumerable
表示能否通过for-in循环返回属性。(属性直接定义在对象中,默认为true)
Writable
表示能否修改属性的值。(属性直接定义在对象中,默认为true)
Value
包含这个属性的数据值 name:jacky
要修改属性默认的特性,
必须使用ECMAScript5的
Object.defineProperty
语法:(属性所在的对象,属性的名字,一个描述符对象)方法
例如:
var obj = new Object();
obj.name = 'zhangsan';
obj.say = function () {};
修改name属性
Object.defineProperty(obj,'name',{
configurable:true,//可删除
enumerable:true,//可循环遍历
writable:true,//可修改
value:'terry'
})
当我们创建一个对象并且为对象设置一个属性的时候,该属性默认特性Configurable、Enumerable、Writable默认都为true,value为该属性的值
新增属性
Object.defineProperties(obj, {
age: {
value: 18,
configurable: true
}
})
对象序列化
对象序列化是指将对象的状态转换为字符串,也可以反序列化,将字符串还原为对象函数
RegExp,Error对象,undefined值不能序列化和反序列化
JSON.stringify(obj) 将对象序列化为JSON字符串
,只能序列化对象可枚举的自有属性
JSON.parse(jsonStr) 将字符串还原为对象函数
// 将对象转换为JSON字符串
// {"name":"briup","age":12}
var obj = {
name:"briup",
age:12
};
console.log(obj); //object类型打印的结果 {name:'briup',age:12}
// 将对象转换为JSON字符串
var json = JSON.stringify(obj);
console.log(json);//string类型的字符串
// 将JSON字符串转换为对象
var obj = JSON.parse(json);
console.log(obj);