引用类型
引用类型的值(对象)是引用类型的一个实例。
定义:引用类型是一种数据结构,用于将数据和功能组织在一起。有时候也被称为对象定义,因为他们描述的是一类对象所具有的属性和方法。
var person = new Object();
解释:新对象是使用new操作符后跟一个构造函数来创建的。
一 Object类型
Object是ECMAScript中使用最多的一个类型。
创建Object实例的方式有两种。
1)使用new操作符后跟Object构造函数
var person=new Object();
person.name="Nicholas";
person.age=29;
2)使用对象字面量方法
var person={
name:"sara",
age:29
}
注:左边的花括号便是对象字面量的开始。属性也可以是字符串
var person={
"name":"sara",
"age":29,
5 :true
}
使用字面量对象语法时,如果留空其花括号,则可以定义默认属性和方法的对象。
访问对象属性的知识点:
一般都使用点(person.name)在javascript中也可以使用方括号(person["name"])义字符串的形式放在方括号中。
方括号的优点:a可以通过变量来访问属性
var propertyName="name"
alert(person["propertyName
"]);
b如果属性命中包含会导致错误的字符,或者属性名使用的关键字或保留字,都可以使用方括号方法。
person["frist name"]="sara";
通常,除非必须使用变量来访问属性,否则我们建议使用点表示法。
二 Array 类型
ECMAScript数组的每一项可以保存任何类型的数据。
1)使用Array构造函数
var colors= new Array();
var colors= new Array(20);//如果预先知道数组保存的项目数量,可以直接传递给构造函数。length:20
var colors= new Array("red","blue","green");
给构造函数传递一个值时也可以创建数组。可以省略new操作符。
2)使用数组字面量表示法创建。
var colors=["red","blue","green"];
var name=[];
var values=[1,2,];不要这样,会创建2或者3项数组。
var options=[,,,,,];
给构造函数传递值时也可以创建数组。
数组的length属性知识点:length不是只读的,通过设置这个属性,可以从数组的末尾移除项或向数组中添加新项
var colors=["red","blue","green"];
colors.length=2;
alert(colors[2]);//undefined
colors有三个值,将length设置为2会移除最后一项(jiyu0的数字索引),结果就是undefined
var colors=["red","blue","green"];
colors[99]="black";
alert(colors.length);//100
三 检测数组
ECMAScript 5新增 if (Array.isArray(value)){对数组进行某些操作
}确定某个值到底是不是数组。(IE9+...)
ECMAScript3 if(value instanceof Array){对数组进行某些操作}
四 转换方法
toLocalString(),toString和valueOf()方法。
var colors=["red","blue","green"];
alert(colors.toString());//red,bule,green
alert(colors.valueOf());//red,bule,green
alert(colors);//red,bule,green
注:结果一样。
var person1={
toLocaleString:function(){
return "Nikolaos";
},
toString:function(){
return "Nicholas";
}
};
var person2={
toLocaleString:function(){
return "Grigorios";
},
toString:function(){
return "Greg"
}
};
var people=[person1,person2];
alert(people);//Nicholas,Greg
alert(people.toString());//Nicholas,Greg
alert(people.toLocaleString());//Nicholas,Grigorios
证明:三个方法不总是返回相同的值。
使用join()方法传入值,可以使用不同的分隔符来构建这个字符串。
alert(colors.join("||"))//red||green||blue
五 栈方法
栈是一种后进先出的数据结构。栈中的插入和移除只发生在栈的顶部。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
六 队列方法
规则是先进先出,队列在列表的末端添加项,从列表的前端移除。
push()是向数组末端添加项;shift()从数组前端取得项并返回该项,同时减少该数组的长度。
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
unshift()ie8才能兼容能在数组前端添加任意个项并返回数组的长度。pop()方法则从数组末尾移除最后一项,减少数组的值。
var colors=new Array();//创建一个数组
var count=colors.unshift("red","green");//推入两项
alert(count);//2
count=colors.unshift("black");//推入另一项
alert(count);//3
var item=colors.pop();//取得最后一项
alert(item);//green
alert(colors.length);//2
七 重排序方法
reverse()[反转数组项的顺序]和sort()
var values=[1,2,3,4,5];
values.reverse();
alert(values);//5,4,3,2,1
sort()默认情况下会按照升序排列数组项,为了实现排序,会调用toString()转型方法,然后比较得到的字符串。
最好的比较方法是接受一个函数来进行比较。


解释:如果第一个参数应该位于第二个之前则返回一个负数,如果两个参数相等则返回0,如果第一个参数应该位于第二个之后则返回一个整数。如果是降序只要返回比较函数返回的值即可。


对于数值类型或者valueOf()方法会返回数值型的对象类型。可以用简单的比较函数。如上。
八 操作方法
ECMAScript为操作已经包含在数组中的项提供了很多方法。concat()这个方法会创建当前数组一个副本,然后接收到的参数添加到这个副本的末尾然后返回新构建的数组。



slice()它能够基于当前数组中的一个或多个项创建一个新数组。一个参数,则返回从该数据指定位置开始到当前数组末尾的所有项。如果两个参数,则返回起始位置和结束位置之间的项-不包括结束位置的项。



splice()恐怕是最强大的算法了,主要用途是向数组中不插入项。
删除:可以删除任意的项,只需提供两个参数(要删除的第一项的位置,删除的项数);
插入:可以向指定位置插入任意数量的项。只需三个参数(起始位置,要删除的项数,要插入的项)
替换:可以指定位置插入任意数量的项,且同时删除任意数量的项。(起始位置,要删除的项数,要插入任意量的项)插入的项不必与删除的项数相等。
返回的时总是数组,包含从原始数组中删除的项,如果没有删除项则返回一个空数组。
九 位置方法
indexOf()从数组的的开头向后找, lastindexOf()从末尾开始向前查找。
都返回要查找的项在数组中的位置,或者没有找到的时候返回-1.