您的位置:首页 > Web前端 > JavaScript

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

2012-07-08 00:23 337 查看
关于引用类型的定义:

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

在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起。它也通常被称为【类】,但是在js中,类这个称呼并不太妥当。

尽管在技术角度上将,js是一门面向对象的语言,但是严格意义上来讲,js并不具备面向对象语言所支持的类、接口、继承等基本属性。

引用类型也被称为【对象定义】,因为他们描述的是一类对象所具有的属性和方法。

第一节:Object类型

Object 可以说是js中使用最多的一个类型,尽管Object的实例没有多少功能,但是对于程序中存储和传输数据而言,却是非常理想的选择。

创建Object:

(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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: