对象类型
Q:函数对象和普通对象的区别?
- 函数对象和内部对象都有prototype属性,普通对象没有。
- proto是每个对象都有的属性。
对象属性的读取和设置
. 和 [ ] 两种方式。
[ ] 可以用变量和数字作为属性名,.则不行。
var obj = {
name: 'zhangsan',
age: 20,
play: function () {
console.log('playing');
}
}
//属性的读取
console.log( obj.name );
console.log( obj['age'] );
var n = 'name';
console.log(obj[n]);
//属性的设置
obj.sex = '男'
obj['age'] = 22
Object.defineProperty(obj,'name',{
value:'lisi',
writable:true,
enumerable:true,
configurable:true
})
属性的分类
分为实例(自有)属性和继承属性
属性的删除
delete() 只能删除自有属性,不能删除继承属性。
属性的检测
- in 检测对象是否含有某个属性
- hasOwnProperty 判断一个属性是否是对象自有的。
- propertyEnumerable 判断属性是否为可枚举的。
obj.propertyEnumerable('name')
属性的遍历
1、for ... in 遍历对象可枚举的实例和继承属性
2、Object.keys() 返回一个数组,包含对象可枚举的实例属性名称
Object.values()
3、Object.getOwnPropertyNames(obj) 返回对象的所有实例属性名称的数组。包含可枚举和不可枚举的。
序列化对象
JSON.stringify(obj[,replacer][,space])
第一个参数 输入对象
第二个参数 过滤参数 数组或方法 可选
第三个参数 控制字符串之间的间距
var person = {name:'zhangs',age:34,sex:'man'}
console.log(JSON.stringify(person)); //{"name":"zhangs","age":34,"sex":"man"}
console.log(JSON.stringify(person,['name','age']));
console.log(JSON.stringify(person,['name','age'],5));
console.log(JSON.stringify(person,['name','age'],'\t'));
console.log(JSON.stringify(person,['name','age'],'ABC'));
JSON.parse()