无类型变量与Object类型的变量不同。关键的区别在于,无类型变量可以保持特殊值undefined,而Object类型的变量不能保存该值。
然而,当我测试它时:
var objTest:Object = 123;
var untypedTest:* = 123;
objTest = undefined;
untypedTest = undefined;
//This is understandable but why was the assignment even allowed?
trace(objTest); // prints null
trace(untypedTest); // prints undefined
objTest=null;
untypedTest = null;
//This is also understandable ... both can store null
trace(objTest); // prints null
trace(untypedTest); // prints null
//If they are null whey are they being equal to undefined?
if(objTest==undefined)
trace("obj is undefined");
if(untypedTest==undefined)
trace("untyped is undefined");
//Because null is same as undefined!
if(null==undefined)
trace("null is same as undefined?");
两个问题:
答案 0 :(得分:10)
一些样本:
var i:int = NaN;
trace (i); // 0
或者:
var b:Boolean = null;
trace(b); // false
因此,当您将undefined
分配给Object
实例时,Flash会以相同的方式将其转换为null
。
Boolean
之前,您的比较在不兼容类型上应用了类型转换。 您可以使用严格比较来false
:
if(null === undefined)
trace("Never traced: null is not the same as undefined!");
答案 1 :(得分:0)
某些值会被静默转换以进行比较或分配。
一种此类转化是undefined
在晋升为null
时转换为Object
的转化。因此null == undefined
因为基本上已经完成的是Object(null) == Object(undefined)
,那就是null == null
。
但是,如果你进行严格的比较,它们不会被转换,因此不相等,即null === undefined
将产生错误。