引用类型
引用类型是一种数据结构,引用将数据和功能组织在一起,引用类型有时候也被称为对象定义,因为他们描述的是一类对象所具有的属性和方法。
对象是某个特定引用类型的实例,新对象是使用new操作符后跟一个构造函数来创建。
var person = new Object();
1、object类型
创建Object实例的方法有两种。第一种是使用new操作符后跟Object构造函数,如下所示:
var person = new Object();
person.name = "Fay";
person.age = 29;
另一种方式是使用对象字面量表示法。对象字面量是对象定义的一种间歇形式,目的在于简化创建包含大量属性的对象的过程,如下所示:
var person{
name= "Fay",
age :21
};
使用对象字面量语法时,如果留空其花括号,则可以定义只包含默认属性和方法的对象。
var person{}; //与new Object()相同
person.name = "Fay";
person.age = 29;
对象字面量也是想函数传递大量可选参数的首选方式。JavaScript可以用方括号
2、Array类型
创建数组的基本方式有两种,第一种是使用array构造函数。
实例
var colors = new Array();
如果预先知道数组要保存的项目数量,也可以给构造函数传递该数量,而该数量会自动变成length属性的值。
实例
var colors = new Array(20);
也可以向Array构造函数传递数组中应该包含的项。
实例
var colors = new Array("red","blue","green");
给构建函数传递一个值也可以创建数组,因为如果传递的是数值,则会按照该数值创建包含给定项数的数组,而如果传递的是其他类型的参数,则会创建包含那个值的只有一项的数组.
实例
var colors = new Array(3); //创建一个包含3项的数组
var names = new Array("Fay"); //创建一个包含1项,即字符串“Fay”的数组
在使用Array构造函数是也可以省略new操作符。
实例
var colors = Array(3); //创建一个包含3项的数组
var names = Array("Fay"); //创建一个包含1项,即字符串“Fay”的数组
创建数组的第二种基本方式是使用数组字面量表示法,数组字面量由一对包含数组项的方括号表示多个数组项之间以逗号隔开。
实例
var colors = ["red","blue","green"]; //创建一个包含3项的数组
var names = []; //创建一个空数组
在读取和设置数组的值时,要使用方括号并提供相应值的基于零的数字索引。
实例
var colors = ["red","blue","green"]; //定义一个字符串数组
alert (colors[0]); //显示第一项
colors [2] = "black"; //修改第三项
colors [3] = "brown"; //新增第四项
数组的项数保存在其length属性中,这个属性始终会返回0或者更大的值。
实例
var colors = ["red","blue","green"]; //创建一个包含3项的数组
var names = []; //创建一个空数组
alert (colors.length); //3
alert (name.length); //0
数组的length属性很有特点——他不只是读的,因此,通过设置这个属性,可以从数组的末尾移出项或向数组中添加新项。
实例
var colors = ["red","blue","green"]; //创建一个包含3项的数组
colors.length = 2;
alter(colors[2]); //undefined
当把一个值放在超过当前数组大小的位置上是,数组就会重新计算其长度值,即长度值等于最后一项的索引加1.
实例
var colors = ["red","blue","green"]; //创建一个包含3项的数组
colors[99] = "black";
alert(colors.length); //100
2.1、监测数组
对一个网页或者一个全局作用域而言,使用instanceof操作符就能得到满意的结果
if (value instanceof Array) {
//对数组执行某些操作
}
instanceof操作符的问题在于,它假定只有一个全局执行环境。
为了解决这个问题,ECMAScript 5 新增了Array.isArray()方法。这个方法的目的是最终确定某个值到底是不是数组。而不管它是在哪个全局执行环境中创建的。
if (Array.isArray (value)) {
//对数组执行某些操作
}
2.2转换方法
所有对象都具备toLocaleString()、toString()和valueOf()方法。其中,调用valueOf()返回的还是数字本身,而调用数组的toString()方法会返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串。实际上,俄日了创建这个师傅穿会调用数组每一项的toString()方法。
var colors = ["red","blue","green"]; //创建一个包含3项的数组
alert (colors.toString()); //red,blue,green
alert (colors.valueOf()); //red,blue,green
alert (colors); //red,blue,green
数组继承的toLocaleString()、toString()和valueOf()方法, 在默认情况下,都会以逗号分隔的字符串的形式返回数组项,而如果使用join()方法,则可以使用不同的分隔符来构建这个字符串join()方法,接收一个参数,既用作分隔符的字符串,然后返回包含所有数组项的字符串。
var colors = ["red","blue","green"];
alert (colors.join(",")); //red,blue,green
alert (colors.join("||")); //red,blue,green
2.3栈方法
数组可以表现的像栈一样,后者是一种可以限制插入和删除项的数据结构。而在栈中项的插入(叫做推入)和移除(叫做弹出)只发生在一个位置栈的顶部。push()方法可以接受任意数量的参数,把他们煮个添加到数组末尾,并返回修改后数组的长度,而pop()方法则从数组末尾移除最后一项,减少数组的length值,然后返回移除的项。
var colors = new Array (); //创建一个数组
var count = colors.push ("red" , "green"); //推入两项
alert(count); //2
var count = colors.push ("blcak"); //推另一项
alert(count); //3
var item = colors.pop (); //取得最后一项
alert(item); //black
alert (colors.length); //2
2.4、队列方法
栈数据结构的访问规则是先进后出,而队列数据结构的访问规则是先进先出队列,在列表的末端添加项,从列表的前端移除项,由于push()是向数组末端添加项的方法,因此要模拟队列,只需一个从数组前端取得象的方法,实现这一操作的数组方法就是shift(),他能够移除数组中的第一个项并返回该项,同时将数组长度减1.
var colors = new Array (); //创建一个数组
var count = colors.push ("red" , "green"); //推入两项
alert(count); //2
var count = colors.push ("blcak"); //推另一项
alert(count); //3
var item = colors.shift (); //取得第一项
alert(item); //red
alert (colors.length); //2
ECMAScript还未数组提供了一个Unshift()方法。unshift()和shift()的用途相反,他能在数组前端添加任意个项并返回新数组的长度。同时使用unshift()和pop()方法,可以从相反的方向来模拟队列,即在数组的前端添加项,从数组末端移出项。
var colors = new Array (); //创建一个数组
var count = colors.unshift ("red" , "green"); //推入两项
alert(count); //2
var count = colors.unshift ("blcak"); //推另一项
alert(count); //3
var item = colors.popt (); //取得第一项
alert(item); //green
alert (colors.length); //2
2.5重排序方法
数组中已经存在两个可以直接用来重排序的方法:reverse()和sort(),reverse()方法会反转数组上的顺序.
var value = [1,2,3,4,5];
values.reverse ();
alert (values); //5,4,3,2,1
sort()方法按升序排列数组项,即最小的值位于最前面,最大的值位于最后面,为了实现排序,sort方法会调用每个数组项的toString转型方法,然后比较得到的字符串,以确定如何排序,即使每组中的每一项都是竖直sort()方法比较的也是字符串.
var value = [0,1,5,10,15];
values.sort ();
alert (values); //0,1,10,15,5
3、Date类型
要创建一个日期对象,使用new操作符合Date构造函数即可。
var now = new Date();
如果传入Date.parse()方法的字符串不能表示如期,那么他会返回NaN,如果直接将表示日期的字符串传递给Date 构造函数,也会在在后天调用Date.parse().
var someDate = new Date("May 25 ,2004")
Date.UTC()方法同样也返回表示日期的毫秒数,但他与Date.parse()在构建值时使用不同的信息。Date.UTC()参数分别是年份、基于0的月份(0是一月,1是二月…)、月中的哪一天是一到三十一、小时数(0-23)、分钟、毫秒数。
//GMT时间2020年9月15号下午20:55:55
var allFives = new Date(Date.UTC (2020,8,15,20,55,55));