JavaScript的对象及正则(RegExp)对象

来源:互联网 发布:舒缦水暖床垫淘宝网 编辑:程序博客网 时间:2024/05/22 03:31
创建对象
1/通过var obj={ }  对象字面量(object literal)法
var obj1={x:3,y:6,z:7}var obj2={        'x':1,        'y':2,        username:'king',        'for':'Javascript关键字必须放到引号之间'        'first-name':'queen',         married:true,         test:null,         test1:undefined,         salary:12.3,         person:{             username:'king',             age:12,             addr:'peking',         }};

2/通过new object( )创建对象
var obj3=new object();//创建一个空对象,{}var arr=new Array();//空数组[]var date=new Date();//日期时间对象var reg=new RegExp('js');//创建正则对象


 3/通过构造函数创建对象
function Test(){}var obj4=new Test();var obj4=Test();//意为运行该函数 function Test1(num1,num2){   this.n1=num1;   this.n2=num2;}var obj5=new Test1(5,6);

通过instanceof操作符可以检测一个对象是否由某个指定的构造器函数
alert (obj5 instanceof Test1);  //输出true

4/通过Object.create来创建对象
var obj6=Object.create( {x:1} );var obj7=Object.create(null); //不会继承var obj8=Object.create(Object.prototype); //创建一个普通的空对象

属性操作
查询属性
①对象名.属性名②对象名[属性名]③当处于某个对象方法内部的时候,可以通过this来访问同一对象的属性
var person={username:'king',age:12,salary:1200,addr:'peking',sex:'男'};//查询属性console.log('用户名为'+person.username+'\n'+'性别'+person.sex);console.log('薪水:'+person['salary']+'\n'+'地址:'+person['addr']) //如果属性不确定需要使用[]var key='username';console.log(person[key])   //不能加''function PersonInfo(name,age,sex){this.name=name;this.age=age;this.sex=sex;}var person1=new PersonInfo('king',34,'男');console.log(person1.name+person['sex'])

添加属性
var obj={}; //空对象obj.username='king';obj.age=12;obj.addr='peking';obj['test']='this is a test';console.log(obj.username+'\n'+obj.age+'\n'+obj.addr+'\n'+obj['test']);

修改制定属性
var obj={}; //空对象obj.username='king';obj.age=12;obj.addr='peking';obj['test']='this is a test';console.log(obj.username+'\n'+obj.age+'\n'+obj.addr+'\n'+obj['test']);

删除属性:通过delete删除制定属性
delete obj.test;

只能删除自身属性,不能删除继承属性。
要删除继承属性,只能从定义它属性的原型对象上删除它,而且只会影响到
delete不能删除那些可配置性为false的属性

遍历属性:通过for in遍历属性
var obj1={x:1,y:2,test:'this is a test'};for(var p in obj1){console.log(p+'\n');}// 输出内容为 x y test

通过in检测对象上是否有某个属性
function foo(){};var obj=new foo();obj.x=1;console.log('x' in obj);//可访问原型console.log(obj.hasOwnProperty('x'));//不访问原型

访问方法
对象名.方法名( )           如果对象名.方法名的形式,将返回定义函数的字符串
var obj2={username:'king',age:12,sayHi:function(){return 'say Hi';},info:function(){return '用户名'+this.username+'\n'+'年龄:'+this.age+'\n地址:'+this.addr;}};console.log(obj2.sayHi());console.log(obj2.info());

对象结构

对象属性特征
数据属性:4个表述行为的特征:
[[configurable]]
表示是否能通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性。直接在对象上定义的属性,他们的默认值为true
[[Enumerable]]
表示能否通过for in循环返回属性。代表属性是否可以枚举。直接在对象上定义的属性默认值为true
[[writable]]  
表示能否修改属性的值。默认值为true
[[value]]

包含这个属性的数据值。读取属性值的时候,从这个位置读取。

写入属性值的时候,把新值保存在这个位置。这个特性的默认值为undefined
如果属性不可配置,但是可以把writable的true变成false,但不能将false变为true

存取器属性:get——获取属性的值                set——设置属性的值

使用

//创建一个对象Object.defineProperty(obj,"x".{value:1,writable:true,enumerable:true,configurable:true});//创建多个对象var person={};Object.defineProperties(person,{'username':{value:'king',writable:true,enumerable:true ,configurable:true},age:{value:12,writable:false}});console.log(Object.getOwnPropertyDescriptor(person,"username"));//得到对象属性描述属性描述 __proto__:null, //强制没有继承而来的属性 IE不支持


三个相关对象特性
1/原型(prototype)
对象的原型指向另外一个对象,本对象的属性继承它自己的原型对象
  • 通过对象字面量创建的对象使用Object.prototype作为它们的原型
  • 通过new创建的对象使用构造函数的prototype属性作为他们的原型
  • 通过Object.create()创建的对象使用第一个参数(也可以是null)作为它们的原型
检测是否为原型对象:console.log(obj.isPrototypeOf(obj1));
 
2/对象的类(class)
一个表示对象类型的字符串,可以通过对象的toString()方法间接查询

3/对象的扩展标记(extensible flag)
指明了是否可以向该对象添加新属性

内建对象之正则(RegExp)对象
语法:var patt=new RegExp(pattern,modifiers);
var patt=/pattern/modifiers;            /模式/模式修饰符

常用修饰符

模式
原创粉丝点击