关于引用类型的定义:前端
引用类型的值(对象)是引用类型的一个实例。数组
在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一块儿。它也一般被称为【类】,可是在js中,类这个称呼并不太稳当。浏览器
尽管在技术角度上将,js是一门面向对象的语言,可是严格意义上来说,js并不具有面向对象语言所支持的类、接口、继承等基本属性。数据结构
引用类型也被称为【对象定义】,由于他们描述的是一类对象所具备的属性和方法。函数
第一节:Object类型spa
Object 能够说是js中使用最多的一个类型,尽管Object的实例没有多少功能,可是对于程序中存储和传输数据而言,倒是很是理想的选择。firefox
建立Object:code
(1)经过new操做符建立:对象
var Obj=new Object(); Obj.a="a"; Obj.b=function (){ //......... }
(2)使用对象字面量建立:这种方式有封装的感受,并且对于传输大量参数很适用排序
var Obj={ a:"a", b: function(){ //............ } }
(3)若是建立时花括号{}留空,则能够定义只包含其默认属性和方法的对象。
var Obj = {}; Obj.a = "a"; //......
注意:在经过字面量定义对象时,不会调用Object构造函数 (firefox 除外)
访问对象属性的2种方法:
(1)经过 . 操做符进行访问: Obj.a;
(2)经过 [] 进行访问: Obj[a];
以上两种方式没有任何区别,可是,经过[]访问的优势是能够使用变量,例如:
var Obj={ a:"a", b:"b", } var c="a"; alert( Obj[c] ) // a
第二节:Array 类型
1.用构造函数建立Array对象
(1)使用Array构造函数 : var a=new Array();
(2)若是预先知道数组中的项目的数量,则能够: var a=new Array( 20 ); 只不过这20项的值都是Undefined
(3)也能够直接向构造函数传递须要建立的项:var a=new Array( "red","blue" );
(4)直接给构造函数传递一个数值,会建立数值数量的空项目:var a=new Array( 3 )
(5)建立数组时也能够省略new操做符:var a= Array( "red","blue" );
2.用字面量建立Array对象
var a=["red","blue","black"];// ok var b=[]; //建立了一个空数组 var d=["red","blue",] //不要这样,不一样浏览器解释不通,可能建立了2项或3项 var d=[,,,,,] //不要这样,不一样浏览器解释不通,可能建立了5项或6项
3.数组的length属性
数组的length属性不是只读的,所以能够经过设置length来从数组的末尾添加或者移除项目:
var a=["red","blue","black"]; a.length=2; // 删除末尾的项目 alert(a[2])// undefined; var b=["red","blue","black"]; b.length=4; // 在末尾添加一个新项目,默认值未定义 blert(a[4])// undefined; var c=["red","blue","black"]; c[c.length]="orange"; // 在数组末尾直接插入项目,其值为orange c[10]="white"; //在数组位置10插入项目,其值为 white, 则4-9位置的项目,默认值都为undefined
4.转换方法
全部对象都具备 toString()、toLocaleString()、valueOf() 方法。
其中,调用数组的toString() 和 valueOf() 方法返回相同的值,这会在后台调用数组每一项的toString()方法,来拼接其最终的字符串。
var a=["red","blue","black"]; alert(a.toString())// 输出:red,blue,black; alert(a.valueOf())// 输出:red,blue,black;
join方法:数组的toString()等方法在输出时,默认用 , 进行分割,利用join能够指定分割符
var a=["red","blue","green"]; alert(a.join("/")); //输出 red/blue/green
5.栈方法和队列方法
(1)push() 接收任意数量的参数,把他们添加到数组的末尾,并返回新数组的长度。
(2)pop() 从数组的末尾移除项目并返回该项目,与push()一块儿能够模拟栈操做;
(3)shift() 能够移除数组第一个项目并返回该项目,与push()一块儿能够模拟队列操做
(4)unshift() 接收任意数量参数,在数组前端添加项目,并返回新数组的长度。
6.重排序方法
(1)reverse() 反转数组项目的顺序
(2)sort() 默认按升序排列数组项目,即最小的在最前面,为了排序,sort()会调用每一个项目的toString()方法转为字符串,而后比较获得的字符串,已肯定排序
// reverse() var a=[1,2,3,4,5]; var b=a.reverse(); alert(b); // 5,4,3,2,1 // sort() var a=[0,1,5,10,15] var b=a.sort(); alert(b) // 0,1,10,15,5
因而可知,sort()的默认排序并不智能,所幸,sort()能够接收一个比较函数做为参数,来实现自定义排序。
function compare(x,y){ if(x<y){//若是第一个参数位于第二个以前,则返回-1; return -1; }else if(x>y){//若是第一个参数位于第二个以后,则返回1; return 1; }else{//若是两个相等返回0; return 0; } //以上判断代码能够替换为更简单的一句 return y-x; }//定义一个比较函数,接收连个参数 var a=[0,1,5,10,15]; a.sort(compare); alert(a);//
reverse() 和 sort() 返回的都是修改后的数组
7.操做方法
(1)concat() 基于当前数组建立一个新的数组,会将接收到的数值或数组的每一项添加到新的数组中
var a=["red","blue"]; var b=a.concat("green","black"); alert(b) // red,blue,green,black var c=a.concat(["green","black"])//接受的参数是数组 alert(c) // red,blue,green,black
(2)slice() 可以基于当前数组建立新数组,接收1个或2个参数,即要返回的项目的起始和结束位置
var a=["red","blue","green","black"]; var b=a.slice(0,2); alert(b); // red,blue,green var c=a.slice(2); alert(c); // green,black
若是slice()参数中有负数,则用数组长度加上负数来肯定其位置,若是开始位置大于结束位置,则返回空数组。
若是是负数,其实能够理解成从数组末尾开始查找,起始位置变成告终束位置,整个颠倒了..
(3)splice() 能够说是最强大的数组操做方法了,主要做用是向数组中部插入项目。使用方法有三种:
删除——能够删除任意项,只需指定两个参数:要删除的第一项位置,及要删除的项数;
插入——指定位置插入任意数量的项,至少提供3个参数:起始位置、0(要删除的项数为0即为插入操做)、要插入的项(可为多项)
替换——指定位置删除任意数量项目,而且插入任意数量项目,删除与插入的能够不相等。至少指定3个参数:起始位置、要删除的项目数、要插入的项目。
var a=["red","blue","green","black"]; var b=a.splice(0,1); var c=a.splice(1,0,"white","orange"); var d=a.splice(2,2,"white","orange") alert(b); // 删除第一项 blue,green,black alert(c); // 插入2项 red,blue,white,orange,green,black alert(d); // 替换2项 red,blue,green,white,orange
splice() 始终都会返回一个数组,包含被删除的项,若是没有被删除的,则返回空数组
第三节:Date类型
12