首先用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
转换为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
不是。 null
转换为Object
是一个空对象。
让我们再次看到:
var s:String = null;
这里String
类型的s
指向Null
类型的值null
参考。
参考String
,值Null
。
String
一个参考可以采取Null
值,而是一个Number
参考无法拍摄Null
值,所以分配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
基本上相当于value is Type ? value : null
。没有复杂的规则要记住。仅当您想将一种类型的值转换为另一种类型的值时才使用Type(value)
。
简单的答案?因为它是闪光灯,闪光灯不好。用尾括号写一个类型是声明一个新对象,并且你传递null作为构造函数参数用于复制或重新解释类型转换。它基本上与说var o = new Object(null);相同。你仍然在创建一个对象。 – 2012-03-06 19:12:49
@AscensionSystems,你是对的。您正在创建一个对象,但它与调用'new Object()'不同,即使结果相同。要理解的最重要的事情是:Object(something)根本不是类型转换:它调用称为Object的顶级函数*,它试图返回* Object值*。而事实证明,'null'的Object值是一个空的Object。 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/package.html#Object() – weltraumpirat 2012-03-06 19:33:38
您需要了解实际是null还是undefined。空是当一个变量已被声明但没有任何值。如果一个变量没有被声明,那么它是未定义的,并且会有编译器错误。 trace(null == undefined); //输出true和trace(null === undefined); //输出错误 – 2012-03-06 19:40:04