读书笔记之外的细节笔记,很多很tricky的地方在编程的过程中会遇到,但是很容易被忘记,这里留下细节。

如何从Date中获得到timestamp

Math.round((new Date()).valueOf() / 1000)

如何从字符串的时间构造Date对象

如果时间字符串的格式为“YYYY-mm-dd HH:mm:ss”,那么就无法使用new的方法来直接构造Date对象。只能通过正则表达式检测,并分解时间字符串,使用set的方法一点点更新时间对象,最后获得到需要的Date对象

无法使用delete删除数组中的对象

delete array[key],会将该key位置置空,但是不会删除这个键值。需要使用slice来处理:”array.slice(key, 1);“从key的位置开始,删除1个单位的对象。

从显示内容上删除一个显示对象的方法

当获得到某个显示对象的时候,display:DisplayObject,使用“display.parent.removeChild(display)”来删除显示对象最为稳妥

显示对象与容器之间的关系

A DisplayObject is anything that can be displayed in an SWF window. An InteractiveObject is type of DisplayObject and is anything that a user can interact with using the mouse and/or keyboard. A DisplayObjectContainer is a type of InteractiveObject that can contain child objects. A Sprite is a type of DisplayObjectContainer that does not have a timeline. A MovieClip is a type of DisplayObjectContainer that has a timeline.

DisplayObject是可以显示在SWF窗口上的东西。InteractiveObject是DisplayObject的子类型,负责人机交互方面。DisplayObjectContainer是InteractiveObject中的子类型,可以承载子显示对象。Sprite是DisplayObjectContainer的子类型,其中并未包含timeline。而MovieClip则包含timeline。

Dictionary没有内置获取长度的函数

必须自己轮询子元素来实现

不可以使用if直接判断Object、Array、Dictionary中有没有内容

[codesyntax lang="actionscript3"]

var obj:Object = {};
if (obj) {
    trace('true');
} else {
    trace('false');
}
// result is 'true'!!!

[/codesyntax]

DisplayObjectContainer的addChildAt函数

这个函数的index必须是连续的,如果在index1上没有东西的话,向index2上插入对象将会得到RangeError

ActionScript中Object和Dictionary的差别

In summary, dictionary[key] does NOT necessarily return the same value as dictionary["key"], even if key.toString() equals "key".

However, object[key] will return the same value as object["key"], if key.toString() equals "key".

这里:简单来说,dictionary[key]不一定会返回和dictionary["key"]相同的结果,即便key.toString()的值和"key"相同。而如果key.toString的值和"key"相同,object[key]将会返回和object["key"]相同的结果

for与foreach的区别

[codesyntax lang="actionscript3"]

var items:Array = ["hi", "there", "bob"];
for (var index:String in items) {
	trace(index+" => "+items[index]); // traces "0 => hi", "1 => there" and "2 => bob"
}

[/codesyntax]

[codesyntax lang="actionscript3"]

var items:Array = ["hi", "there", "bob"];
for each (var value:String in items) {
	trace(value); // traces "hi", "there" and "bob"
}

[/codesyntax]

检查Object和Array中key和value是否存在的方法

检查value的话,两者都没有原生的方法能检查,需要自己写方法检查

检查key的话,两者都可以使用hasOwnProperty来进行检查(因为Object是所有类的基类)

Font字体管理

Font.enumerateFonts(true)可获得所有字体,包含嵌入字体和系统字体,false则只会获得嵌入字体。嵌入字体的fontType是embedded,系统字体则是device

单引号与双引号没有区别

这里

You can use either as delimiter for a string. They are however not interchangeable, i.e. you can't start a string with an apostrophe and end it with a quotation mark.

The only difference is which characters you need to escape. Inside a string delimited by quotation marks you need to escape quotation marks but not apostrophes, and vice versa.

To put the text He said "It's all right" and laughed. in a string you can use:
"He said \"It's all right\" and laughed."
or:
'He said "It\'s all right" and laughed.'

Signal的介绍

这里,这篇文章里描述了Signal,DeluxeSignal,NativeSignal三种类型的signal的用处和差别

actionscript里的Vector

actionscript里的Vector就是泛型的Array,有点类似于Dictionary和Object之间的关系,但是又不同。var sprites:Vector.<Sprite> = new Vector.<Sprite>();

DisplayObjecteContainer的函数getChildAt的报错

DisplayObjecteContainer的函数getChildAt如果调用的时候给的index是不存在的话,会报错2006,所以如果获取一个你不知道是否存在的子对象的时候,记得要try catch,来吞掉这个error

当需要调用某个类中一个你都不知道存在与否的函数的时候

这个时候需要try catch,吞掉错误编号为1006和1069的error。1006表示该变量存在,但是不是一个函数。1069表示在这个类对象中根本不存在这个变量。