第五章:引用类型
object类型:
创建object类型两种方式:
使用new操作符后跟Object构造函数:var person=new Object(); person.name="wz";person.age="20";
使用对象字面量表示法:var person = {name:"wz",age:20};
访问object类型属性两种方式:
点表示法:person.name
方括号表示法:person["name"] //优点是可以通过变量来访问属性:var propertyname="name"; person[propertyname];
Array类型:
创建数组的两种方式:
使用new操作法后跟Array构造函数:var colors= new Array();//参数可以为数组大小 or 初始化存储的数据(用,分隔)
使用数组字面量表示法:var colors=["red","blue","black"];
读取与设置数组的值:
使用方括号加基于0的数字索引:colors[0]="white";
数组的项数保存在其length属性中。(不是只读,可以直接更改改变数组的大小):colors[colors.length]="orange";//在数组末尾添加
检测数组:
使用instanceof关键字:value instanceof Aaary
使用Array静态方法:Array.isArray(value)
转换数组:
toString()方法反悔由数组中每个值的字符串拼接而成的一个以逗号分隔的字符串。
使用join()方法可以使用不同的分隔符来构建字符串:color.join("||");//返回结果red||green||blue
valueOf()方法返回的还是数组。
栈方法:
push()在数组尾加入 pop()在数组尾取出
队列方法:
push()在数组尾加入 shift()在数组头取出
unshift()在数组头加入 pop()在数组尾取出 相反的方向模拟队列
重排序方法:
reverse() 反转数组
sort() 按升序排列数组 会调用每一项的toString()转型方法,然后比较得到的字符串
sort()可以接收一个比较函数作为参数。
操作方法:
concat() 数组的拼接:复制当前数组,并把接收到的参数添加到副本的末尾。
slice() 子数组:可以接受一个或两个参数:必选参数:子数组开始位置;可选参数:子数组结束位置
splice() 删除:两个参数:删除开始位置 删除的项数
插入:三个参数:插入位置 0(删除的项数) 要插入的项
替换:三个参数:替换位置 删除的项数 要替换的项
位置方法:
indexOf() 两个参数:要查找的项 (可选)表示查找起点的位置
lastIndexOf() 反向查找
迭代方法:
every() 对数组中每一项运行给定函数,该函数对每一项都为true,则返回结果为true
filter() 对数组中每一项运行给定函数,返回该函数返回true的项组成的函数
foreach() 数组中每一项运行给定函数,这个方法没有返回值
map() 对数组中每一项运行给定函数,返回每次函数调用结果组成的数组
some() 对数组中每一项运行给定函数,该函数对任一项返回true,返回结果为true
传入这些方法的函数接受三个参数:数组项的值,该项在数组中的位置,数组对象本身
缩小方法:
reduce() 从数组的第一项开始,逐个遍历到最后
reduceRight() 与reduce()方向相反
DATA类型:
创建一个日期对象,使用new操作符和Data构造函数:var now=new Data(); //不传递参数的情况下,自动获得当前日期和时间
//Data的各种函数待以后添加
RegExp类型:
用来支持正则表达式。
使用类似perl的语法创建正则表达式:(字面量形式)
var expression = / pattern / flags;
pattern部分可以使任何简单或复杂的正则表达式。每个正则表达式可以带有一个或多个标志(flags),用以标明正则表达式的行为。
正则表达式的匹配模式支持下列三个标志:g:全局模式 i:不区分大小写模式 m:多行模式
模式中使用的所有元字符都需要转义。元字符包括{ } [ ] ( ) \ ^ $ | ? * + .
使用RegExp构造函数创建正则表达式:
var expression = new RegExp( pattren(string) , flags(string) ); //构造函数的模式参数是字符串,所有需要对一些字符双重转义
RegExp实例属性:
global:布尔值,表示是否设置了g标志
ignoceCase:布尔值,表示是否设置了i标志
lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0开始
multiline:布尔值,表示是否设置了m标志
source:正则表达式的字符串表示,按照字面量形式而非穿入构造函数中的字符串模式返回。
RegExp实例方法:
exec()方法:接受一个参数,即要应用模式的字符串,然后返回包含第一个匹配项信息的数组;或者在没有匹配项的情况下返回null。
返回的数组虽然是Array的实例,但包含两个额外的属性:index和input:index表示匹配项在字符串中的位置,input表示应用正在表达式的字符串。
数组中,第一项是与整个模式匹配的字符串,其他项是与模式中的捕获组匹配的字符串。
test()方法:接受一个字符串参数,在模式与该参数匹配的情况下返回true,否则返回false。
Function类型:
函数实际上是对象。每个函数都是Function类型的实例。
由于函数是对象,所以函数名实际上也是指向函数对象的指针,不会与某个函数绑定。(所以就是为什么javascript中函数没有重载,只是改变了函数名指向最后一个函数对象)
function sum(num1, num2){
return sum1+sum2;
}
var sum= function(num1,num2){
return sum1+sum2;
};
函数声明与函数表达式两种定义方法。
在代码执行之前,解析器通过一个名为函数生命提升的过程,读取并将函数声明添加到执行环境中。所以函数声明可以放在使用函数的位置之后;但是函数表达式就会报错
函数内部属性:有两个特殊的属性:arguments和this。还有caller属性(记录调用当前函数的函数的引用,不详细介绍)
arguments主要作用是保存函数参数,带该对象还有一个特殊的属性:callee,该属性是一个指针,指向拥有这个arguments对象的函数。
下面这个经典的阶乘函数:
function factorial(num){ if(num<1){ return 1; } else{ return num*factorial(num-1); } }
但是这个函数的执行与函数名factorial紧紧耦合在一起,为了消除耦合的关系,可以使用arguments.callee:
function factorial(num){ if(num<1){ return 1; } else{ return num*arguments.callee(num-1); } }
函数属性与方法:
每个函数包含两个属性:length和prototype。length属性表示函数希望接收的命名参数的个数;对ECMAScript中的引用类型而言,prototype是保存它们所有实例方法的真正所在。
每个函数都包含两个非继承而来的方法:apply()和call()。这两个方法的用途都是在特定的作用域调用函数,实际上等于设置函数体内this对象的值。
apply():接收两个参数:一个是在其中运行函数的作用域,另一个是参数数组(可以使Array数组,也可以是arguments对象)
call(): 与apply()方法作用相同,区别在于接收参数的方式不同。
这两个函数最强大的地方就是能够扩充函数赖以运行的作用域。
bind():这个方法会创建一个函数的实例,其this值会被绑定到传给bind()函数的值
基本包装类型:
ECMAScript提供三种特殊的引用类型:Boolean,Number,和String。
Number:toFixed() toExponential() toPrecision()
String: length属性 concat() slice() substr() substring() indexOf() lastIndexOf() trim()
toUpperCase() toLowerCase() toLocaleUpperCase() toLocaleLowerCase() match() search() replace() slice() localeCompare() fromCharCode()
单体内置对象:
Global对象:
encodeURI()
encodeURIComponent()
decodeURI()
decodeURIComponent()
eval()
Math对象:
posted on 2015-12-10 20:01 heart_Craft 阅读(63) 评论(0) 编辑 收藏 举报