大多数引用类型值都是Object类型的实例;而且Object也是ECMAScript中使用最多的一个类型。
创建Object实例有如下两种方式:
new操作符后跟Object构造函数:
var person=new Object( ); person.name="webb"; person.age=25;
对象字面量表示法:
var person={ name:"webb", age:25 };
2. Array类型
除了Object之外,Array类型恐怕是ECMAScript中最常用的类型了。
ECMAScript数组的每一项可以保存任何类型的数据(例如,第一个位置可存放字符串,第二个位置保存数值,第三个位置保存对象,以此类推)。而且ECMAScript数组的大小是可以动态调整的,即可以随着数据的添加自动增长以容纳新增数据。
创建数组的基本方式有两种,
使用Array构造函数:
var colors=new Array( ); var colors=new Array(20); //也可设置length属性 var colors=new Array("red","blue","green"); //包含3个字符串的数组 var colors=Array(3); //可省略new操作符
数组字面量表示法
var colors=["red","blue","green"]; alert(colors[0]); //显示第一项 colors[2]="black"; //修改第三项 colors[3]="brown"; //新增第四项
注:数组的length属性很有特点——它不是只读的。因此通过设置这个属性,可以从数组的末尾移除或添加项。例如,
var colors=["red","blue","green"]; colors.length=2; alert(colors[2]); //undefined colors[colors.length]="black"; //在末尾添加项
2.1 检测数组
对于一个网页,或者一个全局作用域而言,使用instanceof操作符就能判断某个对象是不是数组:
if(value instanceof Array){ //对数组执行某些操作 }
instanceof操作符的问题在于,它假定只有一个全局执行环境。如果网页中包含多个框架,那实际上就存在两个以上不同的全局执行环境,从而存在两个以上不同版本的Array构造函数。如果你从一个框架向另一个框架传入一个数组,那么传入的数组与在第二个框架中原生创建的数组分别具有各自不同的构造函数。
为了解决这个问题,ECMAScript5新增了Array.isArray( )方法。这个方法的目的是最终确定某个值到底是不是数组,而不管它是在哪个全局执行环境中创建的,
if(Array.isArray(value)){ //对数组执行某些操作 }
支持该方法的浏览器有IE9+、Firefox 4+、Safari 5+、Opera 10.5+和Chrome。
2.2 转换方法
调用数组的toString( )方法会返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串。而调用valueOf( )返回的还是数组。实际上,为了创建这个字符串会调用数组每一项的toString( )方法。例如,
var colors=["red","blue","green"]; alert(colors.toString()); //red,blue,green alert(colors.valueOf()); //red,blue,green alert(colors); //red,blue,green
另外,toLocaleString( )方法经常也会返回与toString( )和valueOf( )方法相同的值,但也不总是如此。当调用数组的toLocaleString( )方法时,它也会创建一个数组值的以逗号分隔的字符串。而与前两个方法唯一的不同之处在于,这一次为了取得每一项的值,调用的是每一项的toLocaleString( )方法,而不是toString( )方法。
var person1={ toLocaleString:function(){ return "webbxx"; }, toString:function(){ return "webb"; } }; var person2={ toLocaleString:function(){ return "susanxx"; }, toString:function(){ return "susan"; } }; var people=[person1,person2]; alert(people); //webb,susan alert(people.toString()); //webb,susan alert(people.toLocaleString()); //webbxx,susanxx 使用join( )方法也可输出数组,并可指定分隔符,默认为逗号: var colors=["red","blue","green"]; alert(colors.join(",")); //red,blue,green alert(colors.join("||")); //red||blue||green
2.3 栈方法(LIFO)
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
2.4 队列方法(FIFO)
shift( ):移除数组的第一项并返回该项,同时数组长度减1;
unshift( ):顾名思义,与shift( )用途相反,能在数组前端添加任意个项并返回数组的长度。
2.5 重排序方法
reverse( ):反转数组项的顺序;