第三部分
1.核心类与函数
1.核心类
- 根基:Object
- 语言结构:Class,Function,Namespace,arguments
- 基本类型:int,Boolean,Number,String,uint
- 常用复杂类型:Array,Date,RegExp
- XML相关类:XML,XMLList,Qname
2.全局函数类
- 类型转化
- 编码解码
- 判值函数
- 字符串转数字函数
- 控制台函数
2.数组
- 访问元素用[]符合
- 数组长度 length
- 使用超过“数组长度-1”的索引值会给新的成员赋值
- 强行减小数组长度会删减数组元素
- 多维数组
查找(indexOf,lastIndexOF)
使用
目标数组.indexOf(元素)
目标数组.indexOf(元素,查找的起始位置)
目标数组.lastIndexOf(元素)
目标数组.lastIndexOf(元素,查找的起始位置)判断查找的满足条件为“===”全等
首尾添加新元素(push,unshift)
- 使用
数组.push(元素1,元素2,…n)
数组.unshift(元素1,元素2,…n)- 使用
删除数组首尾元素(pop,shift)
- 使用
数组.pop();
数组.shift();- 使用
插入,删除元素(splice)
- 使用
数组.splice(删除点的索引,要删除的元素数目,新元素1,…n)
数组.splice(删除点的索引,要删除的元素数目)
数组.splice(删除点的索引)
数组.splice(删除点的索引,0,新元素1,…n)- 使用
获取数组部分元素(slice)
- 使用
数组.slice(起点索引,终点索引)
数组.slice(起点索引)- 使用
合并(concat)
- 使用
数组.concat(参数1,参数2,…n)
- 使用
数组的浅复制和深复制
- 浅复制(concat,slice)
var copy:Array = originalArray.concat(); var copy:Array = originalArray.slice();
改动浅复制的引用数组将会导致原数组内容的变化
- 深复制(ByteArray)
//复制foo var foo:Array = [“a string element”,arrayElement , obejctElement]; var fooBA:ByteArray = new ByteArray(); fooBA.writeObject(foo); fooBA.position = 0; var bar:Array = fooBA.readObject() as Array;
- 浅复制(concat,slice)
排序(reverse,sort,sortOn)
使用
数组.reverse();//将数组中的元素倒序
数组.sort();//默认排序
数组.sort(排序方式(定义好的整数常量));
数组.sort(比较函数(函数名));
数组.sortOn(“name”);//根据指定属性,默认排序
数组.sortOn(“name”,排序方式(定义好的整数常量));
数组.sortOn(“name”,比较函数(函数名));
排序方式
Array.CASEINSENSITVE //值为1,按字母顺序排序(大小写不敏感),按数字从小到大排序
Array.DESCENDING //值为2,字母倒序排序
Array.UNIQUESORT //值为4,必须是唯一性排序,如果比较值结果,则放弃排序
Array.RETURNINDEXEDARRAY //值为8,让sort()和sortOn()函数返回值返回排序后的索引列表,同时保持原数组不变
Array.NUMBIC //值为16,强制ort()和sortOn()中对数值采用从小到大排序
比较函数
function 函数名(参数A:类型,参数B:类型):int{……}
操作数组每个元素(forEach,every,filter,map,some)
//遍历操作
forEach(callback:Function,this.Object:*=null):void
//过滤器
filter(callback:Function,this.Object:*=null):Array
//映射器
map(callback:Function,this.Object:*=null):Array
//有一个满足为真
some(callback:Function,this.Object:*=null):Boolean
//全满足为真
every(callback:Function,this.Object:*=null):Boolean
3.字符串String
1.针对字符操作
charAt(i); //访问目标位置的字符
charCodeAt(i); //得到目标位置字符的Unicode字符的整数字符代码
fromCharCode(); //从指定Unicode值得到相应的字符串
2.不变对象
3.重载(+,+=,<,<=,>,>=)
4.常用字符串操作
indexOf()与search()
indexof()参数为普通字符串
search()参数必须为正则表达式
substring(),slice(),substr()
长字符串变量.substring(起始位置,终点位置)
长字符串变量.slice(起始位置,终点位置)
长字符串变量.substr(起始位置,截取字符串长度)
split与正则表达式结合
var str:String = “Sky 666”; var delimiter:RegExp = /(\d+)/ str.split(delimiter);//提取数字
Util工具类
StringUtil.trim(str:String):void //截断字符串首尾空白
StringUtil.substitute(str:String,…rest):String //替换字符串
StringUtil.trimArrayElements(value:String,delimiter:String):String //分割
StringUtil.isWhitespace(character:String):Boolean //检测空白字符
4.XML数据处理
1.语法
根元素(有且只有一个)
开始标记与结束标记
合理嵌套元素
大小写敏感
命名规则
- 元素名字可以包含字母,数字,其他字符
- 元素名字不能以数字或者标点符合开头,不能以(XML,xml,…开头
- 元素名字不包含空格
元素带有属性用””标识
<!--注解-->
- 所有XML文档中文本都会被解析器解析,只有在CDATA部件中会被忽略
2.创建
1.使用构造函数
var foo:String = “<book><name>As3</name> <page>500</page></book>”;
var fooXML:XML = new XML(foo);
2.使用XML文本
var kingdaXML =
<websites>
<site name = “” url=””>
<description>
....
</description>
</site>
</websites>
3.操作
- 使用“.”与“@”直接访问XML对象
trace(kingdaXML .site.description);//访问
trace(kingdaXML .site.@name);//访问site中name属性
- 使用“.”与“@”直接访问,修改,创建和删除XML对象
kingdaXML .site.@name = “” //修改site中name属性
- 使用“.”与“@”直接添加和删除XML对象
kingdaXML .site[0].author = new XML();//添加一个空白节点
kingdaXML .site[0].@language = “”//添加属性
delete kingdaXML .site[0].author //delete关键字删除
- 搜索XML对象子元素与属性
- 后裔访问符(..)
kingdaXML..description //访问名为description 的子节点
- 通配符(*)
kingdaXML.site.@*.toXMLString();//查找site子元素的属性返回XMLList对象
- 表达式制定查找子元素条件
kingdaXML.site.(description<10000);
- 表达式制定查找属性条件
kingdaXML.site.(@name == “”);
- 后裔访问符(..)
4.API实现XML操作
appendChild(child:Object):XML
//在当前子元素列表之后添加
var foo:XML = <data/>
foo.appendChild(<d>ddd</d>);
//输出foo
<data>
<d>ddd</d>
</data>
prependChild(value:Object):XML
//在当前子元素列表之前添加
foo.prependChild(<b>bbb</b>);
//输出foo
<data>
<b>bbb</b>
<d>ddd</d>
</data>
insertChildAfter(child1:Object,child2:Object):*
//在当前子元素child1之后添加
var cNode:XML = <c>ccc</c>;
foo.insertChildAfter(foo.b,cNode);
//输出
<data>
<b>bbb</b>
<c>ccc</c>
<d>ddd</d>
</data>
insertChildBefore(child1:Object,child2:Object):*
//在当前子元素child1之前添加
var aNode:XML = <a>aaa</a>;
foo.insertChildBefore(foo.b,aNode);
//输出
<data>
<a>aaa</a>
<b>bbb</b>
<c>ccc</c>
<d>ddd</d>
</data>
5.XML命名空间
- 方法:
- 为XML加命名空间:
addNameapace()
- 设置与XML对象关联的命名空间:
setNameapace()
- 设置默认命名空间:
default xml namespace
- 为XML加命名空间:
5.异常与错误的捕捉与处理
1.try-catch-finally
try{
//异常嫌疑语句
}catch(){
//生成异常对象,终止try
//AVM会按catch语句顺序,查找和异常对象对应的catch块
//发现异常对象,捕获由catch块语句处理
}finally{
//一定执行
}
2.throw抛出异常
public function ThrowError(){
try{
//生成Error对象抛出
var CustomError_1:TypeError = new TypeError ( “......” , 1200);
throw CustomError_1
//抛出匿名Error对象
throw new Error(“......”);
//抛出一个函数返回Error对象
var errorCause:Number = 5000;
throw reportErrorFunc(errorCause);
}catch(e:Error){
trace(e);
}
}
3.自定义异常
public function A extends SecurityError(){
//自己定义代码
.......
}
4.AS3中的异常层次与结构
- 良好支持
- Error类所包含的信息量丰富
- 系统预定义异常
- 自动抛出系统预定义异常
- API更准确的异定位
- 不会降低程序执行效率
- 处理异常原则与方式
- 提倡
- 遇到异常就处理
- 针对不同的方法提出具体解决方案
- 保持对异常的记录,总结经验
- 忌讳
- 不要使用空代码处理异常
- 不要用宽广的异常对待具体的问题
- 尽量少使用异常处理机制
- 提倡
5.对异常事件的处理
- 类型:
- 扩展ErrorEvent类的异常事件
- 基于状态类的异常事件
- 处理:
- 添加侦听器,与try功能相似
- 变形侦听器函数,与catch功能相似