对象

介绍:对象是多个属性的集合,使用键值对进行保存

对象初始化:

两种方式:字面量和构造函数

字面量

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()方法
					 方法体
				}
			})