打卡时间:20:00-22:00
引用类型
ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起。常常被称为类。引用类型有时候也会被称为对象定义,因为它们描述的是一类对象具有的属性和方法。
虽然引用类型与类看起来相似,但它们并不是相同的概念
var person = new object();
//这行代码创建了object引用类型的一个新实例,将该实例保存在变量person中。使用的后遭函数是object
object类型
object是ECMAScript中使用最多的一个类型。
创建object实例的方式有两种:
1、使用new操作符后跟object构造函数,例:
var person = new object();
person.name = "kathy";
person.age=2;
2、使用对象字面量表示法。对象字面量是对象定义的一种简写形式,目的在于简化创建包含大量属性的对象的过程。例:
var person = {//左边的花括号表示对象字面量的开始,在这里表示一个表达式的开始
name:"kathy",//在对象字面量中,使用逗号来分隔不同的属性
age:2//在age2后面不能添加逗号,因为age是这个对象的最后一个属性。
//最后一个属性后面添加逗号,会在IE7及早版本和opera中导致错误
};
在使用对象字面量语法时,属性名也可以使用字符串,例:
var person = {
name:"kathy",
age:2,
5:true//这里的数值属性名会自动转换为字符串
};
另外,使用对象字面量语法时,如果留空其花括号,则可以定义只包括默认属性和方法的对象,例:
var person = {};//与new object()相同
person.name = "kathy";
person.age = 2;
虽然前面任何一种都可以定义对象,但是开发人员更青睐对象字面量语法。因为这种语法要求的代码量少,而且能够给人封装数据的感觉。实际上,对象字面量也是向函数传递大量可选参数的首选方式,例:
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:"kathy",
age:2
});
displayInfo({
name:Greg
});
//在函数内部,我们通过typeof操作符来检测每个属性是否存在,然后再基于相应的属性来构建一条要显示的消息。
这种传递参数的模式最适合需要向函数传入大量可选参数的情形。对象字面量可以封装多个可选参数。
访问对象属性是有两种方法:点表示法和方括号表示法,例
alert(person.name);//"kathy" 点表示法
alert(person["name"])//kathy 方括号表示法
方括号语法主要的有点是可以通过变量来访问属性,例:
var propertyName="name";
alert(person[propertyName]);
如果属性名中包含会导致语法错误的字符,或者属性名使用的是关键字或保留字,也可以使用方括号表示法,例:
person["first name"]="kathy"
//由于“first name”中包含一个空格,所以不能使用点表示法来访问它。然而属性名中是可以包含非字母非数字的,这时候可以使用方括号来访问。
通常,除非必须使用变量来访问属性,否则建议使用点表示法。
Array类型
ECMAScript与其他语言的不同之处,在于ECMAScript数组的每一项可以保存任何类型的数据。可以用数组的第一个位置来保存字符串,用第二位置来保存数值,第三位置来保存对象,一次类推。而且,它的数组大小是可以动态调整的,可以随着数据的添加自动增长以容纳新增数据。
创建数组的基本方式有两种:
1、使用Array构造函数。
var colors=new Array();
如果预先知道数组要保存的数量,也可以给构造函数传递数量,该数量会自动变成等length属性的值,例:
var colors=new Array(20);
也可以向它传递数组中应该包含的项,例:
var colors=new Array(“red ”,“blue”,“green”);
也可以创建数组。如果传递的是数值,则会按照该数值创建包含给定项数的数组;如果传递的是其他类型的参数,则会创建包含那个值的只有一项的数组。例:
var colors=new Array(3);//创建一个包含3项的数组
var names=new Array("kathy");//创建一个包含1项,即字符串“kathy”的数组
2、使用数组字面量表示法
数组字面量由一堆包含数组项的方括号表示,多个数组项之间以逗号隔开。例:
var colors = ["red","blue","green"];//创建一个包含3个字符串的数组
var names=[];//创建一个空数组
var values=[1,2,];//不要这样!这样会创建一个包含2或3的数组
var options={,,,,,};//不要这样!这样会创建一个包含5或6的数组
//不建议后面两项,是因为在ie8之前的版本ECMAScript实现在数组字面量方面存在bug,强烈建议不要使用这种语法
在读取和设置数组的值的时候,要使用方括号并提供相应值的基于0的数字索引,例:
var colors=["red","blue","green"];//定义一个字符串数组
alert(colors[0]);//显示第一项
colors[2]="black";//修改第三项
colors[3]="yellow"//新增第四项
数组的项数保存在其length属性中,这个属性始终会返回0或更大值,例:
var colors=["red","blue","green"];
var name=[];
alert(colors.length);//3
alert(name.length);//0
//数组的length属性不是只读的,通过设置属性,可以从数组的末尾移除项或者向数组中添加新项:
colors.length=2;
alert(colors(2));//underfined
利用length属性也可以方便的在数组末尾添加新项:
var colors=["red","blue","green"];//创建一个包含3个字符串的数组
colors[colors.length]="black";添加黑色
colors[colors.length]="brown"添加brown
colors.length就是一个数字
var colors=["red","blue","green"];//创建一个包含3个字符串的数组
colors[99]="black";//在99位置添加一个颜色
alert(colors.length);//100
//这个例子中,在colors的数组位置99中插入一个值,结果数组新长度就是(99+1)100,而3-98实际上都是不存在的,若是访问都是返回undefined
网友评论