可以将Vector转换为布尔值吗?

时间:2013-02-27 23:30:39

标签: actionscript-3

我预计如果我将Vector传递给带有布尔参数的方法,编译器会抱怨。但它甚至没有发出警告。当我传递一个Sprite作为参数时,我得到一个警告,但程序仍然编译。为什么类型检查系统没有抓住这个?

package {
    import flash.display.Sprite;

    public class Main extends Sprite {
        public function Main():void {
            test(new Vector.<Number>()); // No warning or error.
            test(new Sprite()); // Warning, but no error.
        }

        public function test(value:Boolean):void {
        }
    }
}

1 个答案:

答案 0 :(得分:4)

这是因为您的函数test()会将您赋予它的值转换为布尔值(true或false),具体取决于它是 truthy还是falsy

示例:

function test(bool:Boolean):void
{
    trace(bool);
}

test( new Sprite() ); // true
test( 5 );            // true
test( undefined );    // false
test( "" );           // false
test( null );         // false

这与准备if语句时使用的过程相同:

if(new Sprite())
{
    trace("Yep.");
}

if(null)
{
    // Never happens.
    trace("Nope.");
}

您可以在此处详细了解强制转换为布尔值的过程:Casting to Boolean

  

<强>亮点

     
      
  • 如果实例为null,则从Object类的实例转换为Boolean返回false;否则,它返回true。
  •   
  • 如果字符串为null或空字符串(“”),则从String值转换为Boolean将返回false。否则,它返回true。
  •   
  • 如果数值为0,则从任何数值数据类型(uint,int和Number)转换为Boolean将导致false,否则返回true。对于Number数据类型,值NaN也会导致false。
  •