对象
介绍:对象是多个属性的集合,使用键值对进行保存
对象初始化:
两种方式:字面量和构造函数
字面量
var obj={
name:"moye",
age:18
}
构造函数
var obj=new Object();
对象属性的访问:
两种方式:点访问符和中括号访问符
点访问符
访问:
var name=obj.name;
写入:
obj.name="terry";
中括号访问符,可以适用于变量
var a="name";
//obj[a]等价于obj["name"]等价于obj.name
对象属性检测
"name" in obj //检测obj对象中是否有名为name的属性
对象属性遍历
注意:只能遍历出可迭代属性,用户创建的对象默认为可迭代属性,不可迭代属性不能被遍历出来,但是可以访问
for(var k in obj){ //for-in循环将obj对象中的每个可迭代属性的属性名赋给k
var v=obj[k]; //中括号访问符可适用于变量的体现
console.log(k,v);
}
删除对象属性
delete obj.name; //从对象obj中删除name属性
对象序列化:
将对象转换为字符串,便于数据传输
两种格式:json字符串格式和查询字符串格式
序列化
var json=JSON.stringify(obj);
//格式:'{"属性名":"属性值","属性名":"属性值"}'
var qs=querystring(obj);
//格式:'属性名=属性值&属性名&属性值'
反序列化:将json字符串格式和查询字符串格式转换为对象
var obj=JSON.parse(json);
var obj=querystring.parse(qs);
Object构造函数
var obj=new Object();
obj.__proto__ //内部属性,指向其构造函数的原型即Object.prototype,不可迭代
实例不能调用其构造函数中的方法,但是可以调用其构造函数原型中的方法
静态方法(声明在构造函数内部的方法)
Object.assign(目标对象,...源对象) //将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
Object.keys(obj) //获取obj中所有可枚举属性的属性名,组成一个数组并返回
Object.values(obj) //获取obj中所有可枚举属性的属性值,组成一个数组并返回
Object.defineProperty() //定义或修改属性
非静态方法(声明在构造函数原型内部的方法)
Object.prototype.constructor //返回创建实例对象的Object构造函数的引用,检测数据类型
Object.prototype.toString() //返回一个表示该对象的字符串,如[object Object]
Object.prototype.valueOf() //返回指定对象的原始值
Object.prototype.hasOwnProperty(k) //判断k是否是对象的自有属性
Object.prototype.propertyIsEnumerable(k) //判断k是否可枚举
定义对象属性
Object.defineProperty(对象名,"属性名",{
configurable:true, //是否可配置
enumerable:true, //是否可枚举
writable:true, //是否可写
set:function(v){ // 在属性发生变化时会自动调用set:function
方法体
},
get:function(){ //在访问 对象.属性名 调用,将会自动调用get:function()方法
方法体
}
})