Object对象是JavaScript的基本数据类型,是多个属性的集合。以键值对的方式保存,属性名是一个字符串。对象初始化和创建对象常用的方法有两种,一种是直接对象的量,一种是通过new关键字1.字面量使用“{}”作为对象边界,对象包含多个属性,属性之间用“,”隔开,属性由属性名和属性值组成,用“:”隔开。而且属性名一般不加引号,除非属性名包含特殊字符(字符、数字、_、$符号除外)。属性值可以是变量或常量。var电话=“18812344321”;varobj={"1":"a",name:"terry","firstname":"jacky",age:12,telephone:phone,gender:"male",sayName:function(){console.log("我的名字是",this.name);}};2。构造函数通过new关键字创建对象varobj=newObject();//相当于varobj={}js对象可以动态添加或删除属性obj.name="terry";obj.age=12;obj.sayName=function(){console.log("我的名字是",this.name);}对象属性访问(写,读)1.点访问符号varobj={};obj.name="terry"//写varname=obj.name;//读取2.括号访问符号当属性名是变量时适合访问varobj={name:"terry",age:12}varname="age"obj[name]//等价于obj["age"]等价于obj.age对象属性检测"name"inobj//判断obj是否包含名为name的属性。对象属性遍历对象属性遍历只能遍历那些可迭代的属性。用户添加的默认属性都是可迭代的属性。不可迭代属性:不显示在console.log中,不能使用for-in循环遍历。但是可以访问varobj={name:"terry",age:12}for(varkinobj){varv=obj[k]console.log(k,v);}//每次循环从obj中获取属性name赋值给k,删除对象属性deleteobj.name//删除obj对象的name属性对象序列化数据传输不能传递一个对象,对象序列化就是把对象转成字符串,方便数据传播。序列化方式有两种:json和qs查询字符串1.jsonjson字符串json是字符串格式'{"username":"terry","password":"123321"}'varobj={username:"terry",密码:“123321”};varjson=JSON.stringify(obj)//jsonis'{"username":"terry","password":"123321"}'返回序列化,将字符串转换为对象varobj=JSON.parse('{"name":"terry","age":12}')//objis{name:"terry",age:12}2.qs查询字符串letqs=require('querystring')varobj={username:“特里”,密码:“123321”};varqs=querystring.stringify(obj)//qs是'username=terry&password=123321'varobj=querystring.parse('name=terry&age=12')//obj是{name:"terry",age:12}对象构造函数varobj=newObject();obj.__proto__内部属性,不可迭代的属性实例不能调用构造函数中的方法,obj不能调用Object中的方法,但可以调用Object.prototype中的方法1.静态方法(在构造函数内部声明的方法)Object。assign(a,b)合并a和b对象Object.keys(obj)获取obj中的所有属性名并返回一个数组Object.values(obj)Object.defineProperty()定义属性2.非静态方法(声明的方法在原型中)*Object.prototype.constructor*Object.prototype.toString()*Object.prototype.valueOf()*Object.prototype.hasOwnProperty(k)varobj={name:"terry",age:12}obj.hasOwnProperty("name")//判断name是否为selfofobj有一个属性*Object.prototype.propertyIsEnumerable(k)定义一个属性1.如何设置一个属性为不可迭代的为属性设置enumerable:false,该属性不可迭代,obj只会显示name属性,但权重属性存在;如果设置为true,属性可以被迭代varobj={name:"terry"}Object.defineProperty(obj,"weight",{configurable:true,enumerable:false,value:"240kg"})2。如何设置只读属性Object.defineProperty(obj,"gender",{configurable:true,enumerable:true,writable:false,value:"male"})3.如何监听某个属性的变化这个原理是Vue的本质原理,vue是一个数据驱动的框架。当数据改变时,视图会自动更新。Object.defineProperty(obj,"age",{configurable:true,enumerable:true,set:function(v){//atobj.age=22console.log("今天是我的生日,准备一份礼物...");this._age=v;},get:function(){returnthis._age;//访问obj.age时调用}})obj.age=22;
