每日三问之javascript引用类型之Object类型、Array类型、Date类型

 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;

日期/时间组件方法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值