JavaScript高级程序设计3--引用类型(上)

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

一、object类型

Object类型是一个基础类型,其他所有类型都从Object继承了基本的行为。

1.创建Object实例的方式:

(1)使用new操作符后跟Object构造函数

var person = new Object();
person.name = 'Nicholas';
person.age = 29;

(2)使用对象字面量表示方法

var person = {
name : 'Nicholas',
age : 29
};

2.访问对象的属性方法

  • 点表示法:person.name
  • 方括号表示法:person["name"]

二、Array类型

Array类型是一组值的有序列表,列表中的元素可以是不同类型的值,并且可以动态改变列表大小,同时还提供了操作和转换这些值的功能。

创建数组的基本方式:

  • 使用Array构造函数:var colors = new Array(3); 或者var colors = Array('red', 'blue', 'green');
  • 使用数组字面量表示法:var colors = ['red', 'blue', 'green'];

1.检测数组:Array.isArray()方法可以确定某个值是不是数组;

支持此方法的浏览器有:IE9+、Firefox 4+、Safari 5+、Opera 10.5+和Chrome。

2.转换方法:toLocaleString()、toString()和valueOf()方法

var colors = ["red", "blue", "green"];		//创建一个包含三个字符串的数组
alert(colors.toString());	//red,blue,green
alert(colors.valueOf());	//red,blue,green
alert(colors);	//red,blue,green,由于alert()要接收字符串参数,故会在后台调用toString()方法
alert(colors.join(","));	//red,blue,green
alert(colors.join("||"));	//red||blue||green
3.栈方法:push()和pop()方法

pop()方法:可以接受任意数量的参数,添加到数组末尾,并返回修改后数组的长度

push()方法:从数组末尾移除最后一项,并返回移除的项

var colors = new Array();		//创建一个数组
var count = colors.push("red", "blue", "green");	//推入三项
alert(count);	//3
var item = colors.pop()	//取得最后一项
alert(item);	//"green"
alert(colors.length);		//2
4.队列方法:push()和shift()方法

shift()方法:移除数组中第一个项并返回该项,同时将数组长度减1。

var colors = new Array();		//创建一个数组
var count = colors.push("red", "blue", "green");	//推入三项
alert(count);	//3
var item = colors.shift()	//取得第一项
alert(item);	//"red"
alert(colors.length);		//2

unshift()方法:可以在数组前端添加任意个项,并返回新数组的长度。

因此,同时使用unshift()和pop()方法可以从相反的方向来模拟队列。

5.重排序方法:reverse()和sort()方法

  • reverse()方法:反转数组项的顺序;
  • sort()方法:按升序排列数组项,此方法比较的是字符串,因此不是最佳方案。

sort()方法可以接受一个比较函数作为参数,以便我们指定哪个值位于哪个值的前面。

//按升序排列
function compare(value1, value2){
	if (value1<value2){
	return -1;
}else if (value1>value2){
	return 1;
}else{
	return 0;
}
}
var values = [0, 1, 5, 10, 15];
values.sort(compare);
alert(values);	//0,1,5,10,15
//交换比较函数返回的值即可产生降序排列的结果。
//对于数值类型或者其valueOf()方法会返回数值类型的对象类型,可以使用下面比较简单的比较函数
function compare(value1, value2){
	return value2-value1;
}
6.操作方法:concat()、slice()、splice()方法

concat()方法:可以基于当前数组中所有项创建一个新数组,并将传入参数添加到结果数组中。

var colors = ["red", "blue", "green"];
var colors2 = colors.concat("yellow", ["black", "brown"]);
alert(colors);	//red,blue,green
alert(colors2);	//red,blue,green,yellow,black,brown
slice()方法:可以基于当前数组中的一个或多个项创建一个新数组。

var colors = ["red", "blue", "green", "yellow", ""purple];
var colors2 = colors.slice(1);
var colors3 = colors.slice(1,4);
alert(colors2);	//blue,green,yellow,purple
alert(colors3);	//blue,green,yellow
splice()方法:主要用途是向数组中部插入项,返回的是从原始数组中删除项组成的数组,有三种使用方式;

  • 删除:可以删除任意数量的项,需指定两个参数:要删除第一项的位置和要删除的项数。例如,splice(0,2)会删除数组中的前两项。
  • 插入:可以向指定位置插入任意数量的项,需指定三个参数:起始位置、0(要删除的项数)和要插入的项。例如splice(2,0,"red","green")会从当前数组的位置2开始插入字符串“red”和“green”。
  • 替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,需指定三个参数:起始位置、要删除的项数和要插入的任意数量的项。例如splice(2,1,"red","green")会删除当前数组位置2的项,然后再从位置2开始插入字符串“red”和“green”。

7.位置方法:indexOf()和lastIndexOf()方法

这两个方法都接收两个参数:要查找的项和表示查找起点位置的索引(可选),只不过indexOf()方法从数组的开头向后查找,lastIndexOf()方法从数组的末尾开始向前查找,这两个方法都返回要查找的项在数组中的位置,或者没找到返回-1。

8.迭代方法:5个迭代方法都接收两个参数:要在每一项上运行的函数和运行该函数的作用域对象(可选)--影响this的值,传入这些方法中的函数会接受三个参数:数组项的值、该项在数组中的位置和数组对象本身。

  • every()方法:对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true。
  • filter()方法:对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组。
  • forEach()方法:对数组中的每一项运行给定函数,此方法没有返回值。
  • map()方法:对数组中的每一项运行给定函数,返回每次 函数调用的结果组成的数组。
  • some()方法:对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true。

以上方法都不会修改数组中包含的值。

var numbers = [1,2,3,4,5,4,3,2,1];
//every()方法
var everyResult = numbers.every(function(item, index, array){
return (item>2);
});
alert(everyResult);		//false
//some()方法
var someResult = numbers.some(function(item, index, array){
return (item>2);
});
alert(someResult);		//true
//filter()方法
var filterResult = numbers.filter(function(item, index, array){
return (item>2);
});
alert(filterResult);		//[3,4,5,4,3]
//map()方法
var mapResult = numbers.map(function(item, index, array){
return item*2;
});
alert(mapResult);		//[2,4,6,8,10,8,6,4,2]
//forEach()方法
//本质与for循环迭代数组一样
numbers.forEach(function(item, index, array){
//执行某些操作
});
9.归并方法:reduce()和reduceRight()方法

这两个方法都会迭代数组的所有项,然后构建一个最终返回的值。其中reduce()从前向后逐个遍历,而reduceRight()方法从后向前逐个遍历,它们都接收两个参数:在每一项上调用的函数和作为归并基础的初始值(可选),调用的函数接收4个参数:前一个值、当前值、项的索引和数组对象。这个函数返回的任何值都会作为第一个参数自动传给下一项

var values = [1,2,3,4,5];
var sum = values.reduce(function(prev, cur, index, array){
	return prev+cur;
});
alert(sum);	//15
//reduceRight()的作用类似,只不过方向相反而已。

三、Date类型

Date类型提供了有关日期和时间的信息,包括当前日期和时间以及相关的计算功能。

var now = new Date();//创建一个日期对象

Date.parse()和Date.UTC()可以返回表示日期的毫秒数;

Date.now()表示调用这个方法时的日期和时间的毫秒数;

ps:在不支持Date.now()方法的浏览器中可以使用+操作符同样获取Date对象的时间戳,例如var start = +new Date();//取得开始时间

具体日期对象方法可参考:JavaScript日期对象


;