Object类型
创建
Object
实例的方式有两种。第一种是使用
new
操作符后跟
Object
构造函数。
var person = new Object();
person.name = "Nicholas";
person.age = 29;
另一种方式是使用
对象字面量
表示法。
var person = {
name : "Nicholas",
age : 29
};
一般来说,访问对象属性时使用的都是点表示法,在
JavaScript
也可以使用方括号表示法来访问对象的属性。
alert(person["name"]); //"Nicholas"
alert(person.name); //"Nicholas"
Array 类型
创建数组的基本方式有两种。第一种是使用 Array 构造函数
var colors = new Array();
// 下面的代码将创建 length 值为 20 的数组。
var colors = new Array(20);
创建数组的第二种基本方式是使用数组字面量表示法
var colors = ["red", "blue", "green"];
检测数组
if (value instanceof Array){
//对数组执行某些操作
}
ECMAScript 5
新增了
Array.isArray()
方法
if (Array.isArray(value)){
//对数组执行某些操作
}
转换方法
所有对象都具有 toLocaleString()、toString()和 valueOf()方法。
var colors = ["red", "blue", "green"]; // 创建一个包含 3 个字符串的数组
alert(colors.toString()); // red,blue,green
alert(colors.valueOf()); // ["red", "blue", "green"];
alert(colors.toLocaleString()); // red,blue,green
而如果使用
join()
方法,则可以使用不同的分隔符来构建这个字符串。
var colors = ["red", "green", "blue"];
alert(colors.join(",")); //red,green,blue
alert(colors.join("||")); //red||green||blue
栈方法
栈是一种
LIFO
(
Last-In-First-Out
,后进先出)的数据结构,也就是最新添加的项最早被移除。
ECMAScript
为数组专门提供了
push()
和
pop()
方法,以便实现类似栈的行为。
var colors = new Array(); // 创建一个数组
var count = colors.push("red", "green"); // 推入两项
alert(count); //2
count = colors.push("black"); // 推入另一项
alert(count); //3
var item = colors.pop(); // 取得最后一项
alert(item); //"black"
alert(colors.length); //2
队列方法
而队列数据结构的访问规则是
FIFO
(First-In-First-Out,先进先出)。队列在列表的末端添加项,从列表的前端移除项。ECMAScript 为数组专门提供了 unshift()和 shift()方法,以便实现类似栈的行为。
var colors = new Array(); //创建一个数组
var count = colors.push("red", "green"); //推入两项
var item = colors.shift(); //取得第一项
alert(item); //"red"
var count = colors.unshift("red", "green"); //推入两项
重排序方法
数组中已经存在两个可以直接用来重排序的方法:
reverse()
和
sort()
。
reverse()
var values = [1, 2, 3, 4, 5];
values.reverse();
alert(values); //5,4,3,2,1
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
// 降序
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); // 15,10,5,1,0
操作方法
concat()方法可以基于当前数组中的所有项创建一个新数组。在没有给 concat()方法传递参数的情况下,它只是复制当前数组并返回副本。
var colors = ["red", "green", "blue"];
var colors2 = colors.concat("yellow", ["black", "brown"]);
alert(colors); //red,green,blue
alert(colors2); //red,green,blue,yellow,black,brown
slice()
它能够基于当前数组中的一或多个项创建一个新数组。
slice()
方法可以接受一或两个参数,即要返回项的起始和结束位置。
在只有一个参数的情况下,slice()
方法返回从该参数指定位置开始到当前数组末尾的所有项。
如果有两个参数,该方法返回起始和结束位置之间的项——但不包括结束位置的项。
var colors = ["red", "green", "blue", "yellow", "purple"];
var colors2 = colors.slice(1);
var colors3 = colors.slice(1,4);
alert(colors2); //green,blue,yellow,purple
alert(colors3); //green,blue,yellow
splice()
方法,这个方法恐怕要算是最强大的数组方法了,它有很多种用法。
删除:可以删除任意数量的项,只需指定 2 个参数:要删除的第一项的位置和要删除的项数。例如, splice(0,2) 会删除数组中的前两项。插入:可以向指定位置插入任意数量的项,只需提供 3 个参数:起始位置、0(要删除的项数)和要插入的项。例如,splice(2,0,"red","green")会从当前数组的位置 2 开始插入字符串"red"和"green"。替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定 3 个参数:起始位置、要删除的项数和要插入的任意数量的项。例如,splice (2,1,"red","green")会删除当前数组位置 2 的项,然后再从位置 2 开始插入字符串"red"和"green"。
var colors = ["red", "green", "blue"];
var removed = colors.splice(0,1); // 删除第一项
alert(colors); // green,blue
alert(removed); // red,返回的数组中只包含一项
removed = colors.splice(1, 0, "yellow", "orange"); // 从位置 1 开始插入两项
alert(colors); // green,yellow,orange,blue
alert(removed); // 返回的是一个空数组
removed = colors.splice(1, 1, "red", "purple"); // 插入两项,删除一项
alert(colors); // green,red,purple,orange,blue
alert(removed); // yellow,返回的数组中只包含一项
位置方法
ECMAScript 5
为数组实例添加了两个位置方法:
indexOf()
和 lastIndexOf()。
这两个方法都接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。其中,indexOf()方法从数组的开头(位置 0)开始向后查找,lastIndexOf()方法则从数组的末尾开始向前查找。
这两个方法都返回要查找的项在数组中的位置,或者在没找到的情况下返回-1。
var numbers = [1,2,3,4,5,4,3,2,1];
alert(numbers.indexOf(4)); //3
alert(numbers.lastIndexOf(4)); //5
alert(numbers.indexOf(4, 4)); //5
alert(numbers.lastIndexOf(4, 4)); //3
var person = { name: "Nicholas" };
var people = [{ name: "Nicholas" }];
var morePeople = [person];
alert(people.indexOf(person)); //-1
alert(morePeople.indexOf(person)); //0
迭代方法
- every():对数组中的每一项运行给定函数,如果该函数对每一项都返回 true,则返回 true。
-
filter() :对数组中的每一项运行给定函数,返回该函数会返回 true 的项组成的数组。
-
map() :对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
-
some() :对数组中的每一项运行给定函数,如果该函数对任一项返回 true ,则返回 true 。
-
forEach() :对数组中的每一项运行给定函数。这个方法没有返回值。
every&&some
var numbers = [1,2,3,4,5,4,3,2,1];
var everyResult = numbers.every(function(item, index, array){
return (item > 2);
});
alert(everyResult); //false
var someResult = numbers.some(function(item, index, array){
return (item > 2);
});
alert(someResult); //true
filter
var numbers = [1,2,3,4,5,4,3,2,1];
var filterResult = numbers.filter(function(item, index, array){
return (item > 2);
});
alert(filterResult); //[3,4,5,4,3]
map
var numbers = [1,2,3,4,5,4,3,2,1];
var mapResult = numbers.map(function(item, index, array){
return item * 2;
});
alert(mapResult); //[2,4,6,8,10,8,6,4,2]
forEach
var numbers = [1,2,3,4,5,4,3,2,1];
numbers.forEach(function(item, index, array){
//执行某些操作
});
归并方法
ECMAScript 5
还新增了两个归并数组的方法:
reduce()
和
reduceRight()。reduce()方法从数组的第一项开始,逐个遍历到最后。而 reduceRight()则从数组的最后一项开始,向前遍历到第一项。
reduce
var values = [1,2,3,4,5];
var sum = values.reduce(function(prev, cur, index, array){
return prev + cur;
});
alert(sum); //15
reduceRight
var values = [1,2,3,4,5];
var sum = values.reduceRight(function(prev, cur, index, array){
return prev + cur;
});
alert(sum); //15
Date 类型
要创建一个日期对象,使用
new
操作符和
Date
构造函数即可。
var now = new Date();
在调用
Date
构造函数而不传递参数的情况下,新创建的对象自动获得当前日期和时间。
Date.parse()
Date.parse()
方法接收一个表示日期的字符串参数,然后尝试根据这个字符串返回相应日期的毫秒数。
例如,要为
2004
年
5
月
25
日创建一个日期对象
var someDate = new Date(Date.parse("May 25, 2004"));
// 等价于
var someDate = new Date("May 25, 2004");
如果传入 Date.parse()方法的字符串不能表示日期,那么它会返回 NaN。
Date.UTC()
Date.UTC()
方法同样也返回表示日期的毫秒数,但它与
Date.parse()
在构建值时使用不同的信息。
Date.UTC() 的参数分别是年份、基于 0 的月份(一月是 0 ,二月是 1 ,以此类推)、月中的哪一天 (1 到 31 )、小时数( 0 到 23 )、分钟、秒以及毫秒数。在这些参数中,只有前两个参数(年和月)是必需的。如果没有提供月中的天数,则假设天数为 1 ;如果省略其他参数,则统统假设为 0 。
// GMT 时间 2000 年 1 月 1 日午夜零时
var y2k = new Date(Date.UTC(2000, 0));
// GMT 时间 2005 年 5 月 5 日下午 5:55:55
var allFives = new Date(Date.UTC(2005, 4, 5, 17, 55, 55));
Date.now()
备注:javascript高级程序设计3版写成了Data.now()
了
Data.now()
方法,返回表示调用这个方法时的日期和时间的毫秒数。
//取得开始时间
var start = Date.now();
//调用函数
doSomething();
//取得停止时间
var stop = Date.now(),
result = stop – start;