当前位置:编程学习 > JS >>

JavaScript之引用类型介绍

答案:

Object类型
  Object类型是JavaScript中使用最多的一种类型。虽然Object的实例不具备多少功能,但对于在应用程序中存储和传输数据而言,它确实是非常理想的选择。

  创建Object实例的方式有两种,第一种是使用new操作符后跟Object构造函数。

复制代码 代码如下:

var person = new Object();
person.name = "tt";
person.age = 12;

  另一种方式是使用对象字面量表示法。
复制代码 代码如下:

var person = {
name : 'tt',
age : 12
}

  另外,使用对象字面量语法时,如果留空其花括号,则可以定义值包含默认属性和方法的对象。

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

  虽然可以使用前面介绍的任何一种方法来定义对象,但开发人员更青睐第二种方法(对象字面量语法),因为这种语法要求的代码量少,而且能给人封装数据的感觉。实际上,对象字面量也是向函数传递大量可选参数的首选方式,例如:
复制代码 代码如下:

function showInfo(args)
{
if(args.name != undefined)
{
alert(args.name);
}
if(args.age != undefined)
{
alert(args.age);
}
}

showInfo({
name:'name',
age:12
});

showInfo({name:'name'});

 一般来说,访问对象属性时使用的都是点表示法,这也是很多面向对象语言中通用的语法。不过,在JavaScript也可以使用方括号表示法来访问对象的属性。例如:
复制代码 代码如下:

alert(person.name);
alert(person['name']);

  从功能上看,这两种访问对象属性的方法没有任何区别。但方括号语法的主要优点是可以通过变量来访问属性。
复制代码 代码如下:

var propertyName = 'name';
alert(person[propertyName]);

  通常,除非必须使用变量来访问属性,否则我们建议使用点表示法。

Array类型
  JavaScript中的数组与其他多数语言中的数组有着相当大的区别。虽然JavaScript数组与其他语言中的数组都是数据的有序列表,但与其他语言不同的是,JavaScript数组的每一项可以保持任何类型的数据。也就是说,可以用数组的第一个位置来保存字符串,用第二个位置来保存数值,用第三个位置来保存对象。而且,JavaScript数组的大小是可以动态调整的,即可以随着数据的添加自动增长以容纳新增数据。

  创建数组的基本方式有两种。第一种是使用Array构造函数。
复制代码 代码如下:

var colors1 = new Array();
var colors2 = new Array(20);
var colors3 = new Array('red','blue','yellow');

  创建数组的第二种基本方式是使用数组字面量表示法。
复制代码 代码如下:

var colors1 = [];
var colors2 = ['red','blue','yellow'];

  在读取和设置数组的值时,要使用方括号并提供相应值的基于0的数字索引。
复制代码 代码如下:

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

  数组的长度保存在其length属性中,这个属性始终会返回0或更大的值。
复制代码 代码如下:

var colors = ['red','blue','yellow'];
var names = [];
alert(colors.length); //3
alert(names.length); //0

  数组的length属性很有特点——它不是只读的。因此,通过设置这个属性,可以从数组的末尾移除项或想数组中添加新项。
复制代码 代码如下:

var colors = ['red','blue','yellow'];
colors.length = 2;
alert(colors[2]); //undefined

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

  利用length属性也可以方便地在数组末尾添加新项。
复制代码 代码如下:

var colors = ['red','blue','yellow'];
colors[colors.length] = 'green'; //在位置3添加一种颜色
colors[colors.length] = 'black'; //再在位置4添加一种颜色

  由于数组最后一项的索引始终是length-1,因此下一个新项的位置就是length。

转换方法

所有对象都具有toLocaleString()、toString()和valueOf()方法。其中,调用数组的toString()和valueOf()方法会返回相同的值,即由数组中每个值的字符串形成拼接而成的一个以逗号分隔的字符串。实际上,为了创建这个字符串会调用数组每一项的toString()方法。
复制代码 代码如下:

var colors = ['red','blue','yellow'];
alert(colors.toString()); //red,blue,yellow
alert(colors.valueOf()); //red,blue,yellow
alert(colors); //red,blue,yellow

  我们首先显式地调用了toString()和valueOf()方法,以便返回数组的字符串表示,每个值的字符串表示拼接成了一个字符串,中间以逗号分隔。最后一行代码直接将数组传递给了alert()。由于alert()要接收字符串参数,所有它会在后台调用toString()方法,由此会得到与直接调用toString()方法相同的结果。

  另外,toLocaleString()方法经常也会返回与toString()和valueOf()方法相同的值,但也不总是如此。当调用数组的toLocaleString()方法时,它也会创建一个数组值的以逗号分隔的字符串。而与前两个方法唯一的不同之处在于,这一次为了取得每一项的值,调用的是每一项的toLocaleString()方法,而不是toString()方法。例如:
复制代码 代码如下:

var person1 = {
toLocaleString : function(){
return "person1 : toLocaleString";
},
toString : function(){
return "person1 : toString";
}
};
var person2 = {
toLocaleString : function(){
return "person2 : toLocaleString";
},
toString : function(){
return "person2 : toString";
}
};
var people = [person1,person2];
alert(people); //person1 : toString,person2 : toString
alert(people.toString()); //person1 : toString,person2 : toString
alert(people.toLocaleString()); //person1 : toLocaleString,person2 : toLocaleString

  数组继承的toLocaleString()、toString()和valueOf()方法,在默认情况下都会以逗号分隔的字符串的形式返回数组项。而如果使用join()方法,则可以使用不同的分隔符来构建这个字符串。
复制代码 代码如下:

var colors = ['red','blue','yellow'];
alert(colors.join(',')); //red,blue,yellow
alert(colors.join('||')); //red||blue||yellow

  注意:如果数组中的某一项的值是null或者undefined,那么该值在join()、toString()、toLocaleString()和valueOf()方法返回的结果中以空字符串表示。

  栈方法


JavScript数组也提供了一种让数组的行为类似于其他数据结构的方法。具体来说,

上一个:JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
下一个:JavaScript基础知识之数据类型

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,