0

我预计如果我将 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 {
        }
    }
}
4

1 回答 1

4

这是因为您的函数test()会将您给它的值转换为布尔值(真或假),具体取决于它是真还是

例子:

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.");
}

您可以在此处阅读有关转换为 Boolean 的过程的更多信息:Casting to Boolean

强调

  • 如果实例为空,则从 Object 类的实例转换为布尔值返回 false;否则,它返回真。
  • 如果字符串为 null 或空字符串 (""),则从字符串值转换为布尔值将返回 false。否则,它返回真。
  • 如果数值为 0,则从任何数值数据类型(uint、int 和 Number)转换为布尔值会导致 false,否则为 true。对于 Number 数据类型,值 NaN 也会导致 false。
于 2013-02-27T23:39:52.850 回答