Flash 非类型化变量对对象有什么好处?空和未定义之间有什么区别?
据此:报价: 非类型化变量与Object类型的变量不同。关键区别在于,非类型化变量可以保存未定义的特殊值,而Object类型的变量不能保存该值 但是,当我将其测试为:Flash 非类型化变量对对象有什么好处?空和未定义之间有什么区别?,flash,apache-flex,actionscript-3,actionscript,Flash,Apache Flex,Actionscript 3,Actionscript,据此:报价: 非类型化变量与Object类型的变量不同。关键区别在于,非类型化变量可以保存未定义的特殊值,而Object类型的变量不能保存该值 但是,当我将其测试为: var objTest:Object = 123; var untypedTest:* = 123; objTest = undefined; untypedTest = undefined;
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?");
两个问题:
- 为什么obj允许未定义的赋值?(这不是个大问题,因为它仍然以空值打印)
- 如果我们将null与未定义进行比较,结果为true(即使null存储在对象中)。如果null和undefined相等,那么它们之间的区别有什么意义呢李>
- Flash具有类型转换功能来转换某些类型李>
或: 因此,当您将var i:int = NaN; trace (i); // 0
赋值给undefined
时,实例Flash以相同的方式将其转换为Object
null
- 您的比较在计算
布尔值之前对不兼容的类型应用了类型转换李>
:为false
if(null === undefined) trace("Never traced: null is not the same as undefined!");
某些值被静默转换以进行比较或赋值 其中一种转换是
在升级到未定义的
时被转换为对象
。因此null
,因为基本上已经完成的是null==undefined
,也就是Object(null)==Object(undefined)
null==null
但是,如果您进行严格比较,它们不会被转换,因此不相等,即
将产生false。。。。完美解释您还可以使用undefined检查键是否位于对象中。i、 e.null===undefined
。您也可以使用null进行检查,但当有人想将null存储为值时,它会中断,例如,if(myObj[“someKey”]==未定义)//添加它
@J_A_X你能给我指一个链接吗,上面写着myObj[“someKey”]=null;//有效的
已被弃用?我已经多次使用在有效键下存储未定义的
的功能。我反对使用null
或0
,因为这会改变值的含义。(即,false
=对象,null
=布尔…)@divillysausages,查看一些给定的,因为未定义的。undefined是ECMAScript的一部分,但随着和Flash离开它,它几乎没有什么用处。另外,我会无缘无故地避开任何可能导致编译错误的东西,这就是为什么null是一个更好的标准。@J_a_X我会告诉你,AS2中更多地使用了false
,但该页面上的任何内容都不表示它已被弃用。即使是中的第三个警告也表示“.只有非类型化变量(或类型为*)可以未定义”,这表示它仍然有效(存储在对象中键下的变量为*)undefined
if(null === undefined) trace("Never traced: null is not the same as undefined!");