为什么转换Object(null)不为null?

时间:2012-03-06 17:58:13

标签: actionscript-3 actionscript

使用Object(null)将null转换为对象时,结果是一个对象。

使用Object(undefined)将undefined强制转换为对象时,结果为对象。

但是说null as Objectundefined as Object仍为空。

这是为什么?我在文档中找不到任何关于此的内容。

这些强制转换所产生的对象可以设置属性并从中读取。就像演员表创建了信息一样,或删除了nullundefined值所具有的任何特殊信息。但AS3文档中没有迹象表明nullundefined特殊类型实际上是对象。

2 个答案:

答案 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变为nullnullString类型的引用的有效值。

现在改为:

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