都说C/C++的类型转换个很头疼的问题。我说AS3的类型转换也简单不了多少(后者相比前者肯定简单些,呵呵)。
何为类型转换
当操作数的类型不同时,需要将一种类型转换为另一种类型,这就是类型转换。
类型转换分为显示类型转换和隐式类型转换两种。
显示类型转换
又名强制类型转换,是开发者手动让一种数据类型转换为另一种数据类型。
这个比较容易理解,也比较容易掌握。
1) 使用Type(type)的类型转换。不一定能转换成功,失败则抛出异常。
var t:String = String(12);
2) 使用as操作符进行的类型转换。不一定能转换成功,失败则返回null。
var sp:Sprite; var mc:MovieClip = sp as MovieClip;
3) 使用parseInt,parseFloat函数将String转换为数值。
var n:int = parseInt("12"); var num:Number = parseFloat("0.3");
4) 使用toString函数将任意类型(undefined和null除外)转换为String。
var n:int = 100; var s:String = n.toString();
隐式类型转换
又名自动类型转换,是编译器或者runtime在做运算的时候自动将一种类型转换为另一种类型。
隐式类型转换分为好几种情况,有的是安全的,有的是不安全的。
1) 数值的类型提升(安全的),将int提升为Number,其实这个是有争议的,因为AS3里的数值内部用的都是Number,然后再将结果转换为响应的类型,这样也就不存在类型提升了。
2) 向上类型转换(安全的),子类向上转换为父类(直接或间接)。比如说MovieClip类型转换为Sprite类型。
3) 由赋值运算产生的类型转换仅限数值型(不安全)
var n:Number = int.MAX_VALUE + 1; var t:int = n; trace(n); // out put 2147483648 trace(t); // out put -2147483648
4) 动态类型赋值运算产生的类型转换。String->Number,Number->String这两个类型转换只有脚本语言里才有的。
var o:Object = { n:3, s:"3" }; var n:int = o.n; // 这是数值 var s:String = o.s; // 这是String trace(n); // out put 3 trace(s); // out put 3
5) 动态类型比较运算产生的类型转换。String->Number。这个是 ECMAScript 的11。9。3 The Abstract Equality Comparison Algorithm规定的,比较变态。
16.If Type(x) is Number and Type(y) is String,return the result of the comparison x == ToNumber(y)。
17.If Type(x) is String and Type(y) is Number,return the result of the comparison ToNumber(x) == y。
var o:Object = { a:"3", b:"" }; trace(o.a == 3); // out put true 这里可能是感觉是Number->String,其实不然 trace(o.b == 0); // out put true 这里会看到其实是String->Number, 0 == int("")
6) 加法运算产生的类型转换。能用数值运算就用数值运算,否则统统toString后再运算。
trace(1 + 2); // 3 trace(1 + true); // 2 1+int(true) trace(true + false); // 1 int(true)+int(true) trace(null + 1); // 1 int(null)+1 trace(true + "1"); // true1 String(true)+"1"
结语
其实以上的类型转换只是AS3里类型转换的一小部分。还有很多都没有覆盖到,呵呵,以后有空了再写了。
» 本文链接地址:https://www.litefeel.com/as3-type-conversion/
» 订阅本站:www.litefeel.com/feed/
» Host on Linode VPS
This post was last modified on 2019 年 03 月 04 日 00:44