flash - 在actionscript中,如何判断数字的类型是Number还是int还是uint?

标签 flash actionscript-3 actionscript

var n:Number = 1;
trace("n is Number:" + (n is Number)); //true
trace("n is int:" + (n is int)); //true
trace("n is uint:" + (n is uint)); //true

var m:Number = 1;
trace("m is Number:" + (m is Number)); //true
trace("m is int:" + (m is int)); //true
trace("m is uint:" + (m is uint)); //true

他们都是真的!在actionscript中,如何判断数字的类型是Number还是int还是uint?

最佳答案

这里的困惑源于 AS3 如何处理类型和数字的特殊微妙之处。 is 运算符测试类继承,但 intuint 实际上不是类。 (这就是为什么它们没有大写 - 因为它们没有类定义。)它们更像类型关联,如果使用得当,可以为您带来一定的便利和性能改进。但出于继承目的,数字就是数字。

这在实践中意味着,如果您创建一个类型为 uint 的变量,那么 Flash 会以 32 位无符号格式(而不是 64 位格式)在内部存储该值用于数字)。如果您更改该变量的值,它将保持相同的格式,因此将强制执行对 uint 的限制:

var a:uint = 0;
a--;
trace(a); // 4294967295 - it wrapped around

但它实际上是对输入为 uint 的号码的引用,而不是号码本身。如果您创建一个新的非类型化引用,这将是显而易见的:

var a:uint = 0;
var b:* = a;
b--
trace(b); // -1

那么回到你的问题,你应该如何实现你的缓冲区写入器?由于 Flash 处理这些类型的方式固有的微妙性,我认为没有绝对正确的答案。一种方法是如果数据满足这些类型的限制,则使用 uintint,否则使用 Number。这将节省内存并保持准确性。但将所有数字视为 Number 也让我觉得这是一种合理的方法。我认为这取决于您计划如何使用缓冲区。

关于flash - 在actionscript中,如何判断数字的类型是Number还是int还是uint?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2669564/

相关文章:

html - 寻找第三方照片库

ios - 如何修复使用 Flash Pro 制作的应用程序中的应用程序加载器错误

xml - 转义 AS3 的 XML 变量中的大括号

html - 退出全屏模式后 Flash 会恢复正常大小吗?

apache-flex - Itemrenderer 调度自定义事件

javascript - 是否有 Flash onload 事件?

Flash:addEventListener 未检测到输入文本框中的粘贴事件

javascript - 将任意 flash 对象 wmode 更改为透明

java - Java中的getter/setter

flash - 将 JSON 传递给 Flash 电影