第五章引用类型
5.1 Object类型
创建Object实例的方式有两种。
第一种是使用new操作符
var person=new Object();
person="eve";
person.age=29;
第二种是对象字面量 **推荐的写法
var person={
name:"eve",
age:20
}
对象字面量的属性名也可以是字符串
var person={
"name":"eve",
"age":20
5:true //数值属性会自动转换成字符串
}
var person={};
person.name="eve";
person.age=20;//这种写法和上面的写法等价
一般来说,访问对象属性使用的是点表示法。但也可以使用方括号来访问对象的属性。
alert(person["name"]);
alert(person.name);
5.2 Array类型
创建数组的基本方式有两种。
第一种使用Array构造函数
var colors=new Array();
可以传递数量也可以传递具体数值
var colors=new Array(20);
var colors=new Array{red,blue,green};
也可以省略new 关键字
var colors=Array(20);
var colors= Array{red,blue,green};
第二种是使用数组字面量表示法.
var colors=[red,blue,green];//创建一个包含3个字符串的数组
var names=[];//创建一个空数组
读取项数用length
alert(colors.length);//3
length不是只读的,可以设置这个属性,从数组的末尾移除项和向数组中添加新项。
var colors=[red,blue,green];
colors[colors.length]="black";//在3上的位置添加
colors[colors.length]="brown";//在4上的位置添加
访问索引是length-1;
检测数组
除了用instanceof
if( value instanceof Array){
//对数组执行某些操作
}
一般用isArray
if(Array.isArray(value)){
//对数组执行某些操作
}区别在于全局作用域
5.2.2 转换方法
所有的对象都具有toLocaleString()、toString()、valueOf()方法
var colors=["red","blue","green"];
alert(colors.toString());//red,bule,green 返回由数组中值拼接的一个以逗号分隔的字符串
alert(colors.valueOf());//red,bule,green 返回的还是数组
//默认分隔符是逗号,可用join方法改变分隔符
var colors=["red","blue","green"];
alert(colors.join(","));//red,blue,green
alert(colors.join("||")); //red||blue||green
alert(colors.join()); //red,blue,green
alert(colors.join(undefined)); //red,blue,green
不传值或者传入undefined,依旧返回逗号
5.2.3 栈方法
LIFO 后进先出
push()从数组末尾插入并返回修改后数组的长度
pop()从删除数组末尾移除最后一项,减少数组的length长度,并返回移除的项
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
5.2.4 队列方法
FIFO 先进先出
shift() 移除数组第一项并返回该项,同时长度减去1
unshift() 在数组第一项添加并返回新数组的长度
var colors=new Array(); //创建一个数组
var count=colors.push("red","green"); //推入两项
alert(count); //2
count=colors.push("black");
alert(count); //3
var item=colors.shift();//取得第一项
alert(item); //red
alert(colors.length); //2
var colors=new Array(); //创建一个数组
var count=colors.unshift("red","green"); //推入两项
alert(count); //2
count=colors.unshift("black"); //推入另一项
alert(count); //3
var item=colors.pop();//取得一最后项
alert(item); //green
alert(colors.length); //2
ie7集更早的版本其unshift方法总是返回undefined而不是数组的长度 ie8 在非兼容模式下回返回正确的长度值
5.2.5 重排序方法
reverse() 反转数组的顺序
sort() 按升序排列数组 比较的是字符串
function compare (value1,vlaue2) {
return vlaue2-value1;
}
var value=[0,10,1,2,5,15];
value.sort(compare);
alert(value); //从大到小的排列 15,10,5,2,1,0
5.2.6 操作方法
concat()连接,把值添加到数组的末尾
slice() 基于当前数组中的一个或多个项创建一个数组。两个参数,返回参数项的起始和结束位置。之间的项,但不包括结束位置。一个参数,返回从该参数指定位置到当前项末尾的所有项。不会影响原始数组
splice() 可以删除、插入、替换,算是最强大的数组方法了。有很多用途,主要用途是向数组中部插入项
var colors=["red","green","blue","yelllow","browns"];
var removed=colors.splice(0,3);//删除操作 要两个参数,要删除的第一项的位置和要删除的项数
alert(colors); //yelllow,browns
alert(removed); //red,green,blue 返回被删除的项
removed=colors.splice(1,0,"orange"); //插入操作 ,从位置1,插入一项
alert(colors); //yelllow,orange,browns
alert(removed);//返回的是一个空数组
removed=colors.splice(2,1,"red","purple"); //替换操作 删除当前位置2的项,然后从位置2开始插图red,purple
alert(colors);//yelllow,orange,red,purple
alert(browns); //orange 返回的数组只包括一项
5.2.7 位置方法
indexof() 从数组的开头位置0开始向后查找
lastIndexOf() 从数组的开头向前查找
两个方法都返回要查找项在数组中的位置,没有找到返回-1.都接受两个参数,要查找的项和表示查找起点位置的索引(可选)。
查找特定项在数组中的位置
5.2.8 迭代方法
every()查询数组中的项是否满足条件。传入的函数每一项都返回ture,才返回true
filter()
forEach()
map()
some()查询数组中的项是否满足条件。只要传入的函数有一项返回ture,就返回true
都不会修改数组中包含的值
5.2.9 归并并法
reduce()
reduceRight()
5.3 Date类型
创建日期对象
var now=new Date();
在不传递参数的情况下返回的是当前日期和时间。
如果想得到特定的日期和时间创建日期对象,则需要传入参数
ECMAscripte提供了两个方法:Date.parse()和Date.UTC();
Date.parse()接收一个表示日期的字符串参数,返回相应日期的毫秒数。
var someDate=new Date(Date.parse("May 25,2004"));
可简化为
var someDate=new Date("May 25,2004");
Date.UTC()同样返回日期的毫秒数。参数分别表示年份,基于0的月份,天,小时,秒,毫秒。只有前两个是必须的。
如:
var y2k=new Date(2000,0);//本地时间2000年1月1日
var allFives=new Date(2005,4,5,17,55,55);//本地时间2005年4月5日下午5:55:55
ECMAscript5添加了Date.now()方法。返回调用这个方法时的日期和时间的毫秒数。
var start=Date.now();//取得开始时间
doSomething//调用函数
var stop=Date.now();//取得停止时间
var result=stop-start;
直接方法的浏览器包括iE9,firefox3+,safari3+.opera10.5,chorme;
在不支持的浏览器中科院使用+操作符获取Date对象的时间戳 。
var start=new Date();//取得开始时间
doSomething//调用函数
var stop=+new Date();//取得停止时间
var result=stop-start;
5.3.1继承的方法
便于比较日期时间值
var date1=new Date(2007,0,1);
var date2=new Date(2007,0,1);
alert(date1<date1);//true
alert(date1>date1);//false
5.3.2日期格式化的方法
5.3.3日期/时间组件方法
5.4 RegExp类型
5.4.1 RegExp实例属性
5.4.2 RegExp实例方法
5.4.3 RegExp构造函数属性
5.4.4 模式的局限性
5.5 Function类型
5.5.2 函数声明与函数表达式
5.5.3 作为值得函数
5.5.4 函数内部属性
5.5.5 函数属性和方法
5.6 基本包装类型
5.6.1 Boolean类型
5.6.2 Number类型
5.6.3 String
5.7 单体内置对象
5.7.1 Global对象
5.7.2 Math对象
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。