使用Object(null)
将null转换为对象时,结果是一个对象。
使用Object(undefined)
将undefined强制转换为对象时,结果为对象。
但是说null as Object
或undefined as Object
仍为空。
这是为什么?我在文档中找不到任何关于此的内容。
这些强制转换所产生的对象可以设置属性并从中读取。就像演员表创建了信息一样,或删除了null
和undefined
值所具有的任何特殊信息。但AS3文档中没有迹象表明null
和undefined
特殊类型实际上是对象。
答案 0 :(得分:3)
两种铸造技术之间存在差异。这是一个很好的阅读:http://upshots.org/actionscript-3/as3-casting-objects
基本上,Object(null)实际上将null转换为Object,而" as"尝试查看是否可以将null视为对象,但它不能。
答案 1 :(得分:3)
首先使用String
进行解释会更容易。
假设我们这样做:
var v:* = null;
var s:String = v;
会发生什么? s
变为null
。 null
是String
类型的引用的有效值。
现在改为:
var v:* = null;
var s:String = String(v);
现在发生了什么? s
变为"null"
。我们在这里明确要求输入String
类型的对象,但null
的类型为Null
,因此必须进行转换。转换为null
的{{1}}为String
。
如果您要将"null"
转换为123.45
,则会获得String
。很公平。
现在让我们试试"123.45"
。
Object
var v:* = null;
var obj:Object = v;
变为obj
。
现在:
null
我们再次明确要求var v:* = null;
var obj:Object = Object(v);
指向obj
类型的值 - Object
不是。转换为null
的{{1}}是一个空对象。
让我们再看一遍:
null
此处Object
类型的引用var s:String = null;
指向s
类型的值String
。
参考null
,价值Null
。
String
引用可以采用Null
值,但String
引用不能使用Null
值,因此将Number
分配给Null
时1}}必须将其转换(即null
)。
Number
从参考和价值观的角度思考确实有帮助。
还有助于记住转换用于引用,转换用于值。 0
是转化。 var n:Number = Number(null); // 0
是演员。
最后,让我们尝试使用用户定义的类型。
Object(value)
然后:
(value as Object)
此处class Person {}
变为var person:Person = null;
,正如您所料。
可是:
person
null
再次成为var person:Person = Person(null);
!我们要求person
,但我们得到null
。怎么样?
无法将值Person
转换为Null
类型。在这种情况下,结果是所需类型的默认值。 null
的默认值为Person
。
您也可以看到此转换为Person
。
null
Number
变为var n:Number = Number("123.45");
。
n
123.45
变为var n:Number = Number("The quick brown fox, period.");
。
由于字符串n
无法转换为NaN
类型,因此结果是"The quick brown fox, period."
的默认值,即Number
。这与我们成功将Number
转换为NaN
的前一个示例形成对比,产生null
。
我可以继续。
如有疑问,请使用Number
运算符。 0
基本上等于as
。没有复杂的规则要记住。仅当您要将一种类型的值转换为另一种类型的值时才使用value as Type
。