javascript高级程序设计学笔记——第五章 引用类型

对象是某个特定引用类型的实例;新对象是使用new操作符后跟构造函数来创建的,构造函数本身就是一个函数,只不过该函数是出于创建新对象的目的而存在的;

一、Object类型

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

var person = new Object();
person.name = "Lily";
person.age = 13;

另一种方式是使用对象字面量表示法,对象字面量是对象定义的一种简写形式,目的是简化创建包含大量属性的对象的过程如,如:

var person = {
name : "Lily",
age : 12<span style="white-space:pre">	</span>//因为age是最后一个属性,所以不能添加逗号
};

使用对象字面量语法时,如果留空花括号,则可以定义只包含默认属性和方法的对象,如下所示:

var person = {};//跟 new Object()相同,在通过对象字面量定义对象时,实际上不会调用构造函数;
person.name = "Lily";
person.age = 12;

一般来说,访问对象属性是使用的都是点表示法,在javascript也可以使用方括号表示法来访问对象的属性,将要访问的属性名以字符串的形式放在方括号中,如下面的例子所示:

alert(person["name"]);
aler(person.name);

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

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

如果属性名中包含hi导致语法错误的字符,或者属性名使用的是关键字或者保留字,也可以使用方括号表示法,如:

person["first name"] = "Lily";
person["property"] = "Lily";

二、Array类型

ECMAScript数组(Array)是有序列表,数组的每一项都可以保存任何类型的数

据,也就是说,可以用数组的第一个位置来保存字符串,用第二位置类保存Number,用第三位置来保存对象,以此类推。而且,ECMAScript数组的大小是可以动态调整的,即可以随着数据的添加自动增长以容纳新的数据;

创建数组的基本方式有两种:第一种是使用Array构造函数,如:

var colorsArray = new Array();

如果预先知道数组要保存的项目数量,也可以给构造函数传递该数量,而该数量会自动变成length属性的值,如:

var colorsArray = new Array(12);

也可以向Array构造函数传递数组中应该包含的项,如:

var colorsArray = new Array("red", "blue", "green");

在使用Array构造函数时也可以省略new操作符,如:

var colorsArray = Array(3);
var namesArray = Array("Lily");

创建数组的第二种方法是使用数组字面量表示法,数组字面量表示法有一对方括号表示,多个数组项之间以逗号隔开,如:

var colors = ["red", "blue", "green"];
var names = [];
var values = [1, 2];
var options = [1, "red"];

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

var colors = ["red", "blue", "green"];
alert(colors[0]);
color[2] = "black";
color[3] = "brown";

数组的项数保存在其length属性中,这个属性始终会返回0或更大的值,通过设置这个属性,可以从数组的末尾移除想或向数组中添加新项,如:

var colors = ["red", "blue", "green"];
colors.length = 2;
alert(colors[2]);//undefined
var colors = ["red", "yellow", "blue"];
colors.length = 4;
alert(colors[3]);//undefined
var colors = ["red", "blue", "yellow"];
colors[colors.length] = "black";
colors[colors.length] = "brown";

1、检测数组

判断这个值到底是不是数组:isArray(value),这是一个函数;

2、转换方法

所有对象都具有 toLocaleString()、toString()、valueof()方法;

调用数组的 toString() 方法会返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串;

调用 valueof() 返回的还是数组;

var colors = ["red", "blue", "green"];
alert(colors.toString());//red,blue,green
alert(colors.valueof());//red,blue.green
alert(colors);//red,blue.green

如果数组中的以某一项的值是null或者undefined,那么该值在 join()、toLocaleString()、toString() 和 valueof() 方法返回的结果是一个空字符串;

3、栈方法

数组可以表现得像栈一样,是一种可以限制插入和删除项的数据结构,栈是一种后进先出的数据结构。ECMAScript为数组专门提供了 push() 和 pop() 方法,使得可以实现类似栈的行为;

push() 方法可以接收任意数量的参数,把他们逐个添加到数组末尾,并返回修改后数组的长度;而 pop() 方法则从数组末尾移除最后一项,减少数组的 length 值,然后返回移除的值,如:

var colors = new Array();
var count = colors.push("red", "green");//推入两项
alert(count);//2

count = colors.push("black");//推入一项
alert(count);//3

var item = color.pop();//移除最后一项
alert(item);//black
alert(color.length);//2

4、队列方法

队列数据结构的访问规则是先进先出,队列在列表的末端添加项,从列表的前端移除项;

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():在数组前端添加人一个项并返回新数组的长度;

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);
alert(colors.length);

5、重排序方法

reverse():反转数组项的顺序;

sort():按照升序排列数组项;

6、操作方法

concat():基于当前函数中的所有项创建一个新数组,这个方法会先创建当前数组的一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组;在没有给 concat() 方法传递参数的情况下,只是复制当前数组并返回副本;如果传递给 concat() 方法的是一个或多个数组,则该方法会把参数数组的每一项添加到副本数组中;如果传递的值不是数组,这些值就会被简单地添加到副本数组的末尾中;

var colors = ["red", "blue", "green"];
var colors2 = colors.concat("yellow", "black");
alert(colors);//red,green,blue
alert(colors2);//red,green,blue,yellow,black

slice():它能够基于当前数组中的一个或多个项创建一个新的数组。slice()  函数可以接收一个或两个参数,即要返回项的起始和结束位置。在只有一个参数的情况下,slice() 函数返回从参数指定位置开始到当前数组末尾的所有项。如果有两个参数,该方法返回开始参数到结束参数之间的项——但不包括结束参数的项。注意,slice() 函数不影响原始数组,如:

var colors = ["red", "green", "blue", "yellow", "purple"];
var color2 = colors.slice(1);
var color3 = colors.slice(1, 4);
alert(colors2);//green,blue,yellow,purple
alert(colors3);//green,blue,yellow

splice()函数:

删除:可以删除任意数量的项,只需指定2个参数:要删除的第一项的位置和要删除项的数量;

插入:可以向指定位置插入任意数量的项,只需指定3个参数:起始位置、0(要删除的项数)和要插入的项,如 splice(2, 0, "red", "green");

替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定3个参数:起始位置、要删除的项数和要插入的任意数量的项。插入的项数不必跟删除的项数相等;

splice() 函数始终都会返回一个数组,该数组中包含从原始数组中删除的项,如果没有删除的项,则返回一个空数组;

7、位置方法

indexOf():

lastIndexOf():

8、迭代方法

9、缩小方法

三、Date类型

1、继承的方法

2、日期的格式化方法

3、日期/时间组件方法

四、RegExp类型

1、RegExp实例属性

2、RegExp实例方法

3、RegExp构造函数属性

4、模式的局限性

五、Function类型

每个函数都是Function类型的实例,而且都与其他引用类型一样拥有属性和方法。由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定;函数声明语法定义,如:

function sum (num1, num2){
<span style="white-space:pre">	</span>return num1 + num2;
}
这与下面使用函数表达式定义函数的方式几乎相差无几,如:
var sum = function(num1, num2){
<span style="white-space:pre">	</span>return num1 + num2;
};
var sum = new Function("num1", "num2", "return num1 + num2");

函数是对象,函数名是指针,由于函数名仅仅是指向函数的指针,因此函数名与包含对象指针的其他变量,也就是说,一个函数可能会有多个名字,如:
function sum (num1, num2){
return num1 + num2;
}
alert(sum(10, 10));

var anotherSum = sum;
alert(anotherSum(10, 10));

sum = null;
alert(anotherSum(10, 10));

1、没有重载(深入理解)

函数是对象,函数名是指针。创建的第二个函数,实际上会覆盖第一个的函数;

2、函数声明与函数表达式

解析器会率先读取函数声明,并使其在执行任何代码之前可用;至于函数表达式,则必须等到解析器执行到它所在的代码块,才会被解释执行;

函数声明:函数执行语句跟函数声明语句不分先后;

函数表达式:函数执行语句必须在函数表达式语句后面;

3、作为值的函数

4、函数内部属性

在函数内部,有两个特殊的对象:arguments和this。arguments有一个名叫callee的属性,该属性是一个指针,指向拥有arguments这个对象的函数;

this对象:是函数据以执行的环境对象,当在网页的全局作用域中调用函数时,this对象引用的就是window;

5、函数属性和方法

每个函数都包含两个属性:length和prototype,length属性表示函数希望接受的命名参数的个数,如:

function sayName(name){
//函数体
}
function sum(num1, num2){
//函数体
}
function sayHi(){
//函数体
}

alert(sayName.length);//result:1
alert(sum.length);//result:2
alert(sayHi.length);//result:0

prototype:是保存它们所有实例方法的真正所在;

六、基本包装类型

1、Boolean类型

2、Number类型

3、String类型

七、单体内置对象

1、Global对象

2、Math对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值