1.对象
1.1 对象的创立(单个 2种)
(1)字面量模式 var obj = { name:'zhangsan', age:18, '123':'number' } 对象能够有多个属性,属性名个别不增加引号,非凡状况的须要加引号,比方下面的'123',即不合乎命名标准的。(2)构造函数模式 var obj = new Object() obj.name = 'zhangsan'; obj.age = 20;
1.2 对象的拜访
(1)属性拜访 a.点拜访 obj.name; b.中括号拜访 obj['name']; 留神:中括号里外面须要的属性须要用引号引起来(2)办法的拜访:办法的拜访次要是为了执行该对象中的办法,须要依照函数调用的形式去应用 //以下的执行后果是不一样的。 obj.sayName(); obj.sayName();//办法的应用(3)遍历对象中的属性: for...in用于遍历数组或者对象的属性 for(自定义变量名 in 数组/对象){ 执行代码 } for(var key in obj){ var value = obj[key]; }
1.3 新增删除对象中的属性
(1) 只能删除对象的自有属性 delete obj.name; delete obj['name']; delete obj.sayName//从obj对象中删除sayName属性(2)新增属性 obj.name = 'value';
1.4 Object显示类型转换(强制类型转换 3种)
1.4.1 Object类型到Boolean类型
(1) 应用Boolean包装器进行转换 //除了空援用(null)会被转为false,其余的都会被转为true var obj = { name:'zhansan', age:18 } console.log(Boolean(obj));//true 应用Boolean包装器进行转换时,有如下规定
数据类型 | 转换为true的值 | 转换为false的值 |
---|
Boolean | true | false |
String | 任何非空的字符串 | ""(空字符串) |
Number | 任何非零数字(包含无穷大) | 0和NaN |
Object | 任何对象 | null |
Undefined | 无 | undefined |
1.4.2 Object类型转String类型
转换规则(对象转String)(1) 先调用对象的toString办法(2) 判断该办法的返回值是否为根底数据类型(3)若返回值为根底数据类型,则转换规则依照相应数据类型的转换规则对其进行转换(4)若返回值不是根底数据类型,则在该返回值的根底上持续调用valueOf办法(5)判断valueOf的返回值是否为根底数据类型(6)判断是否为根底类型,若是根底数据类型则进行操作(3)(7)若仍旧不为根底数据类型则报错
1.4.3 Object 类型转Number类型
转换规则(对象转Number)(1)先调用对象的valueOf办法(2)判断该办法的返回值是否为根底数据类型(3)若返回值是根底数据类型,则转换规则依照相应数据类型的转换规则对其进行转换(4)若返回值不为根底数据类型,则在该返回值的根底上持续调用toString办法(5)判断toString的返回值是否为根底数据类型(6)判断是否为根底数据类型,若是根底数据了类型则进行操作(3)(7)若仍旧不为根底数据类型则报错。
1.5 检测属性(3种)
(1)in 检测某属性是否是某对象的自有属性或者是继承属性 var obj = { name:'zhangsan', age:18 } console.log('name' in obj);//true console.log('age' in obj);//true console.log('toString' in obj);//true 继承属性(2) Object.prototype.hasOwnProperty() 检测给定的属性是否是对象的自有属性,对于继承属性将返回false var obj = { name:'zhangsan', age:18 } console.log(obj.hasOwnProperty('name'));//true console.log(obj.hasOwnProperty('toString'));//false 不是自有属性(3)Object.prototype.propertyIsEnumerable() 是hasOwnProperty()的增强版,除了是本身属性外,还要求是可枚举属性,即咱们本人创立的属性 var obj = { name:'zhangsan', age:18 } console.log(obj.propertyIsEnumerable('name'));//true console.log(obj.propertyIsEnumerable('toString'));//false 不是可枚举属性
1.6 Object原型属性及办法(原型办法,实例能够调用的办法)
Object原型种罕用的办法
(1)constructor 保留用户创立以后对象的函数,与原型对象对应的构造函数(2)hasOwnProperty(propertyName) 查看对象的属性名是否是对象的自有属性(3)propertyIsEnumerable(propertyName) 查看给定的属性在以后对象实例中是否存在(4)valueOf() 返回对象的字符串,数值,布尔值的示意(5)toLocaleString() 返回对象的字符串示意,该字符串与执行环境的地区对应(6)toString() 返回对象的字符串(7)isPrototypeOf(Object) 查看传入的对象的原型 a.isPrototypeOf(b) 如果a是b的原型,则返回true,如果b不是对象,或者a不是b的原型,则额返回false。
1.7 深刻了解对象-定义属性
1.7.1 数据属性个性
数据属性 例如name属性 (1)[[Configurable]]:示意是否通过delete删除属性而从新定义属性,默认为true,当为false时,不能删除 (2)[[Enumerable]]:示意是否通过for-in循环返回属性,默认为true,当为false时,不能循环 (3)[[Writable]] :示意是否批改属性的值。(属性间接定义在对象中,默认为true) (4)[[Value]] : 蕴含这个属性的值 name:jacky 要批改属性默认的个性,必须应用ECMAScript5的Object.defineProperty(obj,prop,descriptor)办法 参数阐明:1. obj:必须。指标对象 2. prop:必须。需定义或批改的属性的名字 3. descriptor: 必须。指标属性所领有的个性 返回值:传入函数的对象,即第一个参数obj; Object.defineProperty(obj,'name',{ configurable:true, enumeralbe:true, writable:true, value:'terry' }) console.log(obj.name); 留神:当咱们创立一个对象并且为对象设置一个属性的时候,该属性默认个性Configurable、Enumerable、Writable默认都为true,value为该属性的值。 Object.defineProperties() 语法:Object.definePropertise(obj,props) 参数阐明: 1.obj:必须。指标对象 2.props:该对象的一个或多个键值对定义了将要为对象田增加或批改的的属性的具体配置。 返回值:传入函数的对象,即第一个参数obj; var obj = new Object(); Object.defineProperties(obj, name:{ value:'zhangsan', configurable:false, writable:true, enumerable:true }, age:{ value:18, configurable:true } }) console.log(obj.name,obj.age);
1.7.2 读取属性的个性
(1)Object.getOwnPropertyDescriptor 性能:该办法返回指定对象上一个自有属性对应的属性描述符(自有属性指的是间接赋予该对象的属性,不须要从原型链上进行查找的属性) 语法:Object.getOwnPropertyDescriptor(obj,prop); obj: 须要查找的指标对象 prop: 指标对象内属性名称 var person = { name:'张三', age:18 } var desc = Object.getOwnPropertyDescriptor(person,'name'); console.log(desc);//输入后果如下 //configurable:true, //enumerable:true, //writable:true, //value:'张三'(2)Object.getOwnPropertyDescriptors(obj) 性能:所指对象的所有本身属性的描述符,如果没有任何本身属性,则返回空对象 语法:Object.getOwnPropertyDescriptors(obj) obj为须要查找的指标对象
1.7.3 拜访器属性个性
拜访器属性:这个属性不蕴含数值,蕴含的是一对get和set办法,在读写访问器属性时,就是通过这两个办法来进行解决操作的拜访器属性蕴含的四个个性:(1)[[Configurable]]:示意是否通过delete删除属性而从新定义属性,是否批改属性的个性,或是否把属性批改为拜访器属性,默认为false(2)[[Enumerable]]:示意是否通过for-in循环返回属性,默认为false(3)[[Get]]: 在读取属性时调用的函数,默认值为undefined(4)[[Set]]: 在写入属性时调用的函数,默认值为undefined拜访器属性不能间接定义,要通过Object.defineProperty()这个办法来定义。var book = { _year: 2020,//下划线示意外部属性,只能通过对象的办法来独写 editor: 1};Object.defineProperty(book,'year',{ get:function(){ return this._year; }, //若只指定get办法,不指定set办法,那就默认该属性是只读的 set:function(newYear){ if(newYear !== this._year) this._year = newYear; this.editor++; }})//测试拜访属性中的get,set办法console.log('未修改的year:'+book.year);//2020book.year = 2021;console.log('批改后year:'+book.year);//2021console.log('批改year后的editor:'+book.editor);//2//拜访器属性能够通过Object.getOwnPropertyDescriptor()查问console.log(Object.getOwnPropertyDescriptor(book,'_year'));console.log();由上能够想到数据的双向绑定: a.在一个对象(book)中设置一个公有属性(_year:结尾下划线代表公有属性),再为这个对象设置拜访器属性year(自身还未在对象中定义) b.当book.year进行批改时触发set函数,通过这个函数进行数据的操作,比方数据的判断赋值等一系列操作,从而实现数据的双向绑定。
1.8 对象序列化
(1)对象序列化是指将对象的状态转换为字符串,也能够反序列化,将字符串还原为对象函数(2)RegExp、Error对象,undefined值不能序列化和反序列化(3)JSON.stringify(obj)将对象序列化为JSON字符串,只能序列化对象可枚举的自有属性。(4)JSON.parse(jsonStr)反序列化