JavaScript高级程序设计 第五章 — 引用类型
引用类型的值(对象)是引用类型的一个实例。引用类型是一种数据结构,用于将数据和功能组织在一起,也称类。
引用类型也被称为对象定义,是一类对象所具有的属性和方法。
对象是某个特定引用类型的实例。新对象用 new 操作符后跟一个构建函数。
Object类型
new操作符后跟构建函数:
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类型
创建数组的方式:
var colors = new Array();
var colors = new Array(20); //创建length值为20的数组
数组字面量表示法:
var colors = ["red","blue","green"]; //多个数组项用逗号隔开
数组的最后一项索引始终是 length-1,因此下个新项的位置就是 length。
转换方法
所有对象都具有 toLocalString()、toString()、valueOf()方法
数组的 toString()方法 返回由数组中每个值的字符串形式拼接成的一个以逗号分隔的字符串。
数组的 valueOf()方法 返回的还是数组
var colors = ["red","blue","green"];
alert(colors.toString()); //red,blue,green
alert(colors.valueOf()); //red,blue,green
alert(colors); //red,blue,green
数组继承的 toLocalString()、toString()、valueOf()方法,在默认情况下都会以逗号分隔的字符串形式返回数组项。
join()方法
join()方法 ,可以使用不同的分隔符来构建分隔数组的字符串:
var colors = ["red","green","blue"];
alert(colors.join(",")); // red,green,blue
alert(colors.join("||")); // red||green||blue
栈方法 — push()方法 和 pop()方法
ECMAScript为数组也提供了push()和pop()方法,类似于栈的行为(一种后进先出的数据结构)。
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
队列方法 — shift()方法 和 push()方法
栈数据结构的访问规则是LIFO(后进先出),队列数据结构是FIFO(先进先出)
shift()方法 能够移除数组中第一项并返回该项,同时数组长度减1。
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
unshift()方法 与shift()方法 相反,能再数组前端添加任意个项,并返回新数组长度。
var colors = new Array(); //创建数组
var count = colors.push("red","green"); //推入两项
alert(count); //2
count = colors.unshift("black"); //推入另一项
alert(count); //3
var item = colors.pop(); //取得最后一项
alert(item); //"green"
alert(colors.length); //2
重排序方法 — reverse()方法 和 sort()方法
reverse()方法 反转数组项的顺序
var values = [1,2,3,4,5];
value.reverse();
alert(values); //5,4,3,2,1
sort()方法 按升序排列数组项 —-最小的值位于最前面
sort() 可以接收一个比较函数作为参考,以便我们制定哪个值位于哪个值前面。
比较函数结构两个参数,如果第一个参数应该位于第二个之前返回一个负数,如果两个参数相等,返回零,如果第一个参数应该位于第二个之后则返回正数。
比较函数:
var values = [0,1,5,10,15];
function compare(value1,value2){
if(value1 < value2){
return -1 ;
} else if (value1 > value2){
return 1;
}
}
values.sort(compare);
alert(values); //0,1,5,10,15
以下是一个简单的比较函数:
function compare(value1,value2){
return value2 - value1 ;
}
操作方法 — concat()方法 sort()方法 和 splice()方法
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()方法 能够基于当前数组中的一个或多个项创建一个数组,如果有两个参数,该方法返回起始和结束位置之间的项 —- 但不包括结束位置项,并且不会影响原始数组。
var colors = ["red","green","blue","yellow","purple"];
var colors2 = colors.slice(1);
var color3 = colors.slice(1,4);
alert(color2); //green,blue,yellow,purple
alert(color3); //green,blue,yellow