Flash 非类型化变量对对象有什么好处?空和未定义之间有什么区别?

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;

据此:报价:

非类型化变量与Object类型的变量不同。关键区别在于,非类型化变量可以保存未定义的特殊值,而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?");

两个问题:

  • 为什么obj允许未定义的赋值?(这不是个大问题,因为它仍然以空值打印)
  • 如果我们将null与未定义进行比较,结果为true(即使null存储在对象中)。如果null和undefined相等,那么它们之间的区别有什么意义呢
      • Flash具有类型转换功能来转换某些类型
      其中一些例子:

      var i:int = NaN;
      trace (i); // 0
      
      或:

      因此,当您将
      undefined
      赋值给
      Object
      时,实例Flash以相同的方式将其转换为
      null

      • 您的比较在计算
        布尔值之前对不兼容的类型应用了类型转换
        
      您可以使用严格比较使
      为false

      if(null === undefined)
          trace("Never traced: null is not the same as undefined!");
      

      某些值被静默转换以进行比较或赋值

      其中一种转换是
      未定义的
      在升级到
      对象
      时被转换为
      null
      。因此
      null==undefined
      ,因为基本上已经完成的是
      Object(null)==Object(undefined)
      ,也就是
      null==null


      但是,如果您进行严格比较,它们不会被转换,因此不相等,即
      null===undefined
      将产生false。

      。。。完美解释您还可以使用undefined检查键是否位于对象中。i、 e.
      if(myObj[“someKey”]==未定义)//添加它
      。您也可以使用null进行检查,但当有人想将null存储为值时,它会中断,例如,
      myObj[“someKey”]=null;//有效的
      @J_A_X你能给我指一个链接吗,上面写着
      未定义的
      已被弃用?我已经多次使用在有效键下存储
      null
      的功能。我反对使用
      0
      false
      ,因为这会改变值的含义。(即,
      null
      =对象,
      false
      =布尔…)@divillysausages,查看一些给定的,因为未定义的。undefined是ECMAScript的一部分,但随着和Flash离开它,它几乎没有什么用处。另外,我会无缘无故地避开任何可能导致编译错误的东西,这就是为什么null是一个更好的标准。@J_a_X我会告诉你,AS2中更多地使用了
      undefined
      ,但该页面上的任何内容都不表示它已被弃用。即使是中的第三个警告也表示“.只有非类型化变量(或类型为*)可以未定义”,这表示它仍然有效(存储在对象中键下的变量为*)
      if(null === undefined)
          trace("Never traced: null is not the same as undefined!");