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