第5章 引用类型
引用类型有时被称为对象定义,因为它们描述的是一类对象所具有的属性及方法
5.1 Object类型
创建Object实例的方式有两种。第一种是使用new操作符和Object构造函数。
1 2 3 | var person = new Object(); person.name = "Nicholas"; person.age = 25; |
另一种是使用对象字面量。
1 2 3 4 5 | var person = { name : "Nicholas", age : 29, 5 : true }; |
在对象字面量中,使用逗号分隔不同的属性,属性名会自动转换为字符串。
访问对象属性的两种方式:方括号表示法和点表示法
1 2 | alert(person.name); alert(person["age"]); |
当属性名中包含空格时,一般使用方括号表示法。
5.2 Array类型
创建Array实例的方式有两种。第一种是使用new操作符和Array构造函数,方法与Object实例相同;另一种是使用数组字面量。
1 2 | var color = new Array(3); //创建一个包含3项的数组 var color = ["red","green"]; |
5.2.1 数组检测
如何确定某个对象是不是数组。对于一个网页、或者一个全局作用域而言,可以使用instanceof操作符。
1 2 3 | if(value instanceof Array){ //执行某些操作 } |
若网页中存在多个框架,则实际上存在两个以上不同的全局执行环境,从而存在两个以上不同版本的Array构造函数。instanceof操作符不再适用。
为了解决上述问题,可以适用Array.isArray()方法。
1 2 3 | if(Array.isArray(value)){ //执行某些操作 } |
5.2.2 转换方法
所有对象都具有toLocaleString()、toString()、valueOf()方法。
1 2 3 4 | var colors = ["red","green","blue"]; alert(colors.toString()); alert(colors.valueOf()); alert(colors); //后台默认调用toString() |
上述方法默认返回逗号分隔的字符串,使用join()方法,可以用不同的分隔符来构建。
5.2.3 栈方法和队列方法
数组可以表现的像栈和队列一样,使用push()方法、pop()方法、shift()方法和unshift()方法。
1 2 3 4 5 | var colors = new Array(); colors.push("red","green"); //向数组中推入两项 var value = colors.pop(); //推出最后一项 green var value = colors.shift(); //取得第一项并返回 colors.unshift("red"); //在数组前端推入一项,可返回当前数组长度 |
5.2.4 排序方法
数组中主要包含两种排序方法:reverse()、sort()。其中,reverse()方法会反转数组项的顺序,而sort()方法默认按字符串进行比较。sort()方法能以函数作参数。
1 2 3 4 5 6 7 8 9 10 11 12 | 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 |
比较函数在第一个值应该位于第二个之后的情况返回1,而在第一个值应该在第二个之前的情况下返回-1。两个if判断语句意味着在第一个值小于第二个值的情况下,第一个值位于第二个值之前;第一个值大于第二个值得情况下,则交换。将比较函数作为参数传递给sort方法后,values的数据实现升序排列。