javascript 高级程序设计(三)

第 5 章 引 用 类 型
引用类型是一种数据结构,引用类型有时候也被称为对象定义,因为它们描述的是一类对象所具有的属性和方法。
5.1 Object 类型
创建 Object 实例的方式有两种。第一种是使用 new 操作符后跟 Object 构造函数,如下所示:

var person = new Object();
person.name = "Nicholas";
person.age = 29; 

另一种方式是使用对象字面量表示法。
在 age 属性的值 29 的后面不能添加逗号,会在 IE7 及更早版本和Opera 中导致错误。

var person = {
 name : "Nicholas",
 age : 29
}; 

在使用对象字面量语法时,属性名也可以使用字符串,如下面这个例子所示:
这里的数值属性名会自动转换为字符串。

var person = {
 "name" : "Nicholas",
 "age" : 29,
 5 : true
}; 

使用对象字面量语法时,如果留空其花括号,则可以定义只包含默认属性和方法的对象,如下所示:

var person = {}; //与 new Object()相同
person.name = "Nicholas";
person.age = 29; 

对象字面量也是向函数传递大量可选参数的首选方式,例如:

function displayInfo(args) {
				var output = "";
				if(typeof args.name == "string") {
					output += "Name: " + args.name + "\n";
				}
				if(typeof args.age == "number") {
					output += "Age: " + args.age + "\n";
				}
				alert(output);
			}
			displayInfo({
				name: "Nicholas",
				age: 29
			});
			displayInfo({
				name: "Greg"
			});

在 JavaScript 也可以使用方括号表示法来访问对象的属性。在使用方括号语法时,应该将要访问的属性以字符串的形式放在方括号中,如下面的例子所示。

alert(person["name"]); //"Nicholas"
alert(person.name); //"Nicholas" 

方括号语法的主要优点是可以通过变量来访问属性,例如:

var propertyName = "name";
alert(person[propertyName]); //"Nicholas" 

属性名中包含会导致语法错误的字符,或者属性名使用的是关键字或保留字,也可以使用方括号表示法。例如:

person["first name"] = "Nicholas"; 

属性名中是可以包含非字母非数字的,这时候就可以使用方括号表示法来访问它们。通常,除非必须使用变量来访问属性,否则我们建议使用点表示法。

5.2 Array 类型
创建数组的基本方式有两种。第一种是使用 Array 构造函数

var colors = new Array(); 

给构造函数传递该数量,而该数量会自动变成 length属性的值。

var colors = new Array(20); 

也可以向 Array 构造函数传递数组中应该包含的项。以下代码创建了一个包含 3 个字符串值的数组:

var colors = new Array("red", "blue", "green"); 

给构造函数传递一个值也可以创建数组,因为如果传递的是数
值,则会按照该数值创建包含给定项数的数组;而如果传递的是其他类型的参数,则会创建包含那个值的只有一项的数组。

var colors = new Array(3); // 创建一个包含 3 项的数组
var names = new Array("Greg"); // 创建一个包含 1 项,即字符串"Greg"的数组

注:在使用 Array 构造函数时也可以省略 new 操作符

创建数组的第二种基本方式是使用数组字面量表示法。

var colors = ["red", "blue", "green"]; // 创建一个包含 3 个字符串的数组
var names = []; // 创建一个空数组
var values = [1,2,]; // 不要这样!这样会创建一个包含 2 或 3 项的数组
var options = [,,,,,]; // 不要这样!这样会创建一个包含 5 或 6 项的数组

在读取和设置数组的值时,要使用方括号并提供相应值的基于 0 的数字索引

var colors = ["red", "blue", "green"]; // 定义一个字符串数组
alert(colors[0]); // 显示第一项
colors[2] = "black"; // 修改第三项
colors[3] = "brown"; // 新增第四项

数组的项数保存在其 length 属性中,这个属性始终会返回 0 或更大的值
在这里插入图片描述
数组的 length 属性很有特点——它不是只读的。因此,通过设置这个属性,可以从数组的末尾移除项或向数组中添加新项。
在这里插入图片描述

这个例子中的数组 colors 一开始有 3 个值。将其 length 属性设置为 2 会移除最后一项(位置为2 的那一项),结果再访问
colors[2]就会显示 undefined 了。

如果将其 length 属性设置为大于数组项数的值,则新增的每一项都会取得 undefined 值,如下所示:
在这里插入图片描述

在此,虽然 colors 数组包含 3 个项,但把它的 length 属性设置成了 4。这个数组不存在位置 3,所以访问这个位置的值就得到了特殊值 undefined。

利用 length 属性也可以方便地在数组末尾添加新项,如下所示:
在这里插入图片描述

5.2.1 检测数组

5.2.2 转换方法
所有对象都具有 toLocaleString()、toString()和 valueOf()方法

var colors = ["red", "blue", "green"]; // 创建一个包含 3 个字符串的数组
alert(colors.toString()); // red,blue,green
alert(colors.valueOf()); // red,blue,green
alert(colors); // red,blue,green

数组继承的 toLocaleString()、toString()和 valueOf()方法,在默认情况下都会以逗号分隔的字符串的形式返回数组项。
join()方法只接收一个参数,即用作分隔符的字符串,然后返回包含所有数组项的字符串。

法只接收一个参数,即用作分隔符的字符串,然后返回包含所有数组项的字符串。请看下面的例子:
var colors = ["red", "green", "blue"];
alert(colors.join(",")); //red,green,blue
alert(colors.join("||")); //red||green||blue 

5.2.3 栈方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章