在ECMAScript 中,引用类型是一种数据结构,用于将数据和功能组织在一起。它也常被称为类。尽管ECMAScript从技术上讲是一门面向对象的语言,但它不具备传统的面向对象语言所支持的类和接口等基本结构。引用类型有时候也被称为对象定义,因为它们描述的是一类对象所具有的属性和方法。这篇文章主要介绍两种引用类型:Object和Array。
解惑
Object类型
创建Object实例方法有两种:
使用new 操作符后跟Object 构造函数、对象字面量。
var person=new Object();
person.name="N";
person.age=11;
//对象字面量
var person={
name:N,
age:11
};
在对象字面量中,使用逗号来分隔不同的属性.在使用对象字面量语法时,属性名也可以使用字符串,即给属性名添加引号。
var person={};//与new Object()作用相同
person.name="N";
person.age=11;
虽然可以使用前面介绍的任何一种方法来定义对象,但开发人员更青睐对象字面量语法,因为这种语法要求的代码量少,而且能够给人封装数据的感觉。实际上,对象字面量也是向函数传递大量可选参数的首选方式。
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"
});
Array类型
ECMAScript 数组的每一项可以保存任何类型的数据。也就是说,可以用数组的第一个位置来保存字符串,用第二位置来保存数值,用第三个位置来保存对象,以此类推。而且,ECMAScript数组的大小是可以动态调整的,即可以随着数据的添加自动增长以容纳新增数据。
var color=new Array();
var color=new Array(20);
var color=new Array("red","blue","green");
创建数组的第二种基本方式是使用数组字面量表示法。数组字面量由一对包含数组项的方括号表示,多个数组项之间以逗号隔开。
var colors=["blue","green"];
1. 转换方式
调用数组的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
2. 栈方法
ECMAScript 数组也提供了一种让数组的行为类似于其他数据结构的方法。具体说来,数组可以表现得就像栈一样。而栈中项的插入和移除,只发生在一个位置——栈的顶部。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
3. 队列方法
栈数据结构的访问规则是LIFO(后进先出),而队列数据结构的访问规则是FIFO(先进先出)。队列在列表的末端添加项,从列表的前端移除项。由于push()是向数组末端添加项的方法,因此要模拟队列只需一个从数组前端取得项的方法。实现这一操作的数组方法就是shift(),它能够移除数组中的第一个项并返回该项,同时将数组长度减1。结合使用shift()和push()方法,可以像使用队列一样使用数组。
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
4. 排序方法
sort()方法按升序排列数组项——即最小的值位于最前面,最大的值排在最后面。为了实现排序,sort()方法会调用每个数组项的toString()转型方法,然后比较得到的字符串,以确定如何排序。即使数组中的每一项都是数值,sort()方法比较的也是字符串而不是数值,因此排序是可能会出现错误。
var values = [0, 1, 5, 10, 15];
values.sort();
alert(values); //0,1,10,15,5
可以通过增加一个比较函数作为参数传递到sort()中。
function compare(value1, value2) {
if (value1
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
领取专属 10元无门槛券
私享最新 技术干货