【天天学3章,一周掌握js】第5章:引用类型

关于引用类型的定义:前端

引用类型的值(对象)是引用类型的一个实例。数组

在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

相关文章
相关标签/搜索