javascript 引用类型

1.Object类型
创建Object实例有两种方法。第一种使用new关键字。比如:
var person=new Object();
person.name="geograous";
person.age=25;
另一种方式是使用对象字面量表示法。比如:
var person={
     name:"geograous",
     age:25
};
这里创建了一个person对象,包含两个属性。一个属性是name,值为字符串类型“geograous”。另一个属性是age,值为数值类型25。
或者:
var person={
     "name":"geograous",
     "age":25,
     5:true
};
这里创建的person有name,age和5三个属性,其中数值类型的5会转化为字符串类型。
第三种:
var person={};
person.name="geograous";
person.age=25;

注意:在通过对象字面量定义对象时,实际上不会调用Object构造函数。

访问对象属性有两种方法。一种是使用.运算符,另一种是使用[]运算符。当属性名称不符合变量定义的规范时,比如以数字开头,中间有空格等,使用[]的方式。比如,访问person对象中的name属性可以使用这两种方式:
person.name;   //得到geograous
person["name"];   //得到geograous
或者也可以这样:
var type="name";
person[type]; //等同于person["name"];


2.Array类型
创建Array实例的方法:
var colors=new Array(); //创建一个空数组
var colors=new Array(3); //创建一个长度为3的数组
var colors=new Array("red","yellow","green");   //创建一个数组,包含red,yellow,green。

//使用字面量表示,也可以这样:
var colors=Array(3);
var names=Array("greg");
//简写形式
var colors=["red","yellow","green"];
var colors=[];

colors[colors.length]="blue"; //在数组末尾增加一项“blue”
colors.length=3; //设置数组长度为3,把第三项之后的数据删除。
colors[5]="orange"; //结果为:"red","yellow","green",undifined,“orange”

检测数组:
if(value instanceof Array){} //ecmascript3
if(Array.isArray(value)){} //ecmascript5检测数组:

toString,toLocalString,valueOf方法:
var person1={
     toLocalString:function(){
          return "georas";
     },
     toString:function(){
          return "geograous";
     }
};
var person2={
     toLocalString:function(){
          return "greg";
     },
     toString:function(){
          return "grigorios";
     }
};
var people=[person1,person2];
alert(people); //geograous,grigorios
alert(people.toString()); //geograous,grigorios
alert(people.toLocalString());   //georas,greg

var colors=["red","blue"];
alert(people.join(",")); //结果为:"red,blue"
alert(people.join("||")); //结果为:"red||blue"

如果数组中的某一项值是null或者undefined,那么该值在join(),toLocalString(),toString()和valueOf()方法中以空字符串表示。

堆栈方法:
var colors=["blue","yellow"]; //创建一个空数组;
var length=colors.push("red");   //往数组的末尾中插入一项,返回数组长度。数组为["blue","yellow","red"],length的值为1;
var color=colors.pop(); //删除数组中最后一个元素,并返回。color为red,colors为["blue","yellow"];
var length=colors.unshift("red"); //往数组中的首部插入一项,返回数组长度。 数组为["red","blue","yellow"],length的值为1;
var color=colors.shift(); //删除数组中的一个元素,并返回。color为red,colors为["blue","yellow"];

排序方法(sort,reverse):
var values=[1,2,3,5,4];
values.sort(); //values为[1,2,3,4,5];
values.sort(cmp);
values.revrese(); //values为[5,4,3,2,1];

function cmp(val1,val2){
     if(val1<val2){
          return 1;
     }else if(val1>val2){
          return  -1;
     }else{ return 0;}
}

操作方法(concat,slice,splice):
concat(value...)方法:原数组不变,返回对原数组扩大后的数组。参数如果是数组,则把数组中的每一项添加到原数组中,否则把该项添加到原数组中。
slice(ind1,ind2)方法:原数组不变,返回对原数组做切割后的数组。两个参数表示前闭后开空间,如果只有一个参数,则表示第二项为数组长度。
splice(ind,num,val...)方法:对原数组做增加删除操作,并返回原数组中删除的项。含义为从ind开始,向后删除num项,并向数组中添加val...,返回删除的num项。

var colors=["red","green"];
//返回对原数组添加blue,black,brown后的数组
var colors=colors.concat("blue",["black","brown"]); //结果为["red","green","blue","black","brown"];
//截取下标为1,到3的元素,并返回。
var colors2=colors.slice(1,4); //结果为["red","green","blue"];
var color=colors2.splice(1,1,"black"); //color为green,colors2为["red","black","blue"];

位置方法(indexOf,lastIndexOf)

迭代方法(every,some,filter,forEach,map)
every(function)方法类似集合中的并集,返回数组中每一项的函数返回值的并集,some(function)方法类似于集合中的交集,返回数组中每一项的函数返回值的交集。function(value,ind,array)函数:value为当前值,ind为下标,array为数组。
filter(function)方法返回原数组中满足函数function的项。
map(function)方法返回原数组中的每一项的函数返回值。
forEach(function)方法没有返回值,对原数组中的没一项进行函数操作。

var nums=[1,2,3,4,5];
nums.every(function(value,ind,array){
     return value>3;
});
//false;
nums.some((function(value,ind,array){
     return value>3;
});
//true;
nums.filter(function(value,ind,array){
     return value>3;
});
//[4,5];
nums.map( function(value,ind,array){
     return value*2;
});
//[2,4,6,8,10];
nums.forEach(function(value,ind,array){
     value=value+1;
});
//nums=[2,3,4,5,6];

归并方法(reduce,reduceRight)
reduce(function),reduceRight(function)方法分别为左规约和右归约。
function(prev,cur,ind,array)函数:prev为之前计算结果,cur为当前值,ind为当前下标,array为数组。

var nums=[1,2,3,4,5];
nums.reduce(function(prev,cur,ind,array){
     return prev+cur;
});
//15


3.Date类型

var now=new Date();   //now为当前时间。

var someDate=new Date(Date.parse("May 25,2004")); //
var someDate1=new Date("May 25,2004");   //以上两者等价。

var y2k=new Date(Date.UTC(2000,0));
var allFives=new Date(Date.UTC(2005,4,5,17,55,55));   //2005年5月5日,下午5点55分55秒。
var y2k1=new Date(2000,0);   //以上两者等价。

获取时间差:
var start=Date.now();
var start1=+new Date(); //以上两者等价。对于不兼容的浏览器,使用此方法
//dosomething
var end=Date.now();
var res=end-start;

当然Date类型也可以比较大小。


4.RegExp类型
创建规则:
var expression=/pattern/flags;

flags:
g:表示全局模式(global)
i:表示不区分大小写(case-insensitive)
m:表示对行(multiline)模式。

//匹配所有的“at”实例
var pattern1=/at/g;

//不区分大小写匹配第一个bat或者cat
var pattern2=/[bc]at/i;
var pattern21=new RegExp("[bc]at","i"); //以上两者等价

//不区分大小写匹配所有以at结尾的实例。
var pattern3=/.at/gi;

正则表达式原字符:(){}[]\.$^|?*+. 如果用到这些字符的“原始意义”时需要转义符\。

//匹配第一个[bc]at,不区分大小写
var pattern4=/\[bc\]at/i;

//匹配所有“.at”,不区分大小写
var pattern5=/\.at/gi;

RegExp实例属性
global:全局模式。
ignoreCase:忽略大小写。
lastIndex:起始下标。
multiline:多行模式。
source:字符串。

var pattern1=/\[bc\]at/i;
pattern1.global; //false;
pattern1.ignoreCase; //true;
pattern1.lastIndex; //0;
pattern1.multiline; //false;
pattern1.source; //"\[bc\]at"

RegExp实例方法
exec()方法。

var text="mon and dad and baby";
var pattern=/mon (and dad (and baby)?)?/ig;

var matches=pattern.exec(text);
matches.index;   //0
matches.input; // "mon and dad and baby"
matches[0]; // "mon and dad and baby"
matches[1];   //"and dad and baby"
matches[2];   //"and baby"

ie的javascript实现在lastIndex属性上存在偏差,即使在非全局模式下,lastIndex属性每次也会发生变化。

test()方法

var text="mon and dad and baby";
var pattern=/mon (and dad (and baby)?)?/ig;

if(pattern.test(text)){
     alert("ok!!!");
}

RegExp构造函数属性
input:$_,输入。
lastMatch:$&,最近匹配。
lastParen:$+,最近匹配组。
leftContext:$`,最近匹配的左边部分。
multiline:$*,多行匹配。
rightContext:$',最近匹配的右边部分。

var text="this has been a short summer";
var pattern = /(.)hort/g;

if(pattern.exec(text)){
     alert(RegExp.input); //"this has been a short summer";
     alert(RegExp.leftContext);   //this has been a 
     alert(RegExp.rightContext);   //summer
     alert(RegExp.lastMatch); //short
     alert(RegExp.lastParen); //s
     alert(RegExp.multiline); //false
}

RegExp.$1...RegExp.$9表示第1-9个捕获组。

var text="this has been a short summer";
var pattern = /(.)hor(.)/g;

if(pattern.exec(text)){
     alert(RegExp.$1); //s
     alert(RegExp.$2); //t
}



5.Function类型

定义函数的方法:
function sum(num1,num2){
     return num1+num2;
}

var sum=function(num1,num2){
     return num1+num2;
}

var sum=new Function("num1","num2","return num1+num2;");

作为值得函数
因为ecmascript中函数名本身就是变量,所以函数也可以作为值来使用。也就是说,不仅可以像传递参数一样把一个函数传递给另一个函数,而且可以将一个函数作为另一个函数的结果返回。

function add10(num){
     return num+10;
}

function callSomeFunc(func,arg){
     return func(arg);
}

//以函数名为参数,调用函数
callSomeFunc(add10,10); //20

//返回一个比较函数
function createCmpFunc(prop){
     return function(obj1,obj2){
          var val1=obj1[prop];
          var val2=obj2[prop];
          if(val1>val2){
               return -1;
          }else if(val1<val2){
               return 1;
          }else{
               return 0;
          }
     }
}

内部属性
arguments,this,callee,caller

//两个函数等价 
//使用函数名
function  factorial  (num){
    
if   (num<=  1 ){ 
        
return  1   ;
    
}   else  {
        
return  num*   factorial  (num- 1   )  ;
    
}
}

//使用callee属性 
function  factorial1  (num){
    
if   (num<=  1 ){ 
        
return  1   ;
    
}   else  {
        
return  num*   this  . callee   (num-  1 )   ;
    
}
}

//this属性 
window  . color   =  "red"
var 
o={   color  : "blue"   }  ;

function 
sayColor (){ 
    
alert   (  this .   color  )
}

sayColor  ()

o.  sayColor =   sayColor  ;
o.  sayColor ()   ;
函数的名字仅仅是一个包含指针的变量而已。因此,即使是在不同的环境中执行,全局的sayColor()与o.sayColor()指向的任然是同一个函数。

函数的属性和方法
length、prototype

function  sayName   (name){
     alert   (name)  ;
}

function  sum  (num1 ,   num2){
    
return  num1+num2  ;
}

function  sayHi  (){
    
alert   (  "hi" )   ;
}

sayName  . length   //1
sum  . length   //2
sayHi  . length   //0

var  o={}   ;
o.  num1 =   1  ;
o.  num2 =   2  ;
var 
o1={}   ;
o1.  num1 =   3  ;
o1.  num2 =   4  ;

function 
sumThis (){ 
    
return this   .  num1 +   this  . num2   ;
}
sumThis  . call   (o)   //3(=1+2) 
sumThis  . call   (o1)   //7(=3+4) 

var  sumO=  sumThis .   bind  (o)
alert  (sumO()) //3(=1+2)





6.基本包装类型

7.单体内置对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值