在我们的代码中,我有以下内容,现在请忽略//*
位;
if (data["someKey"] != null)//*
{
CONSOLE_OUT.info("Print some stuff.");
TARGET::myTarget
{
var someString:String = data["someKey"] as String;//*
someController.setSoemthing(someString.indexOf("soemthing") > -1 ? true : false);//*
}
}
我已将FlashCS4设置为将TARGET::myTarget
编译器常量设置为false
,这意味着不应编译编译器常量中的代码。在执行点data["someKey"]
求值为null
意味着if语句不应该执行。
当我调试下面的代码时,执行//*
的行,这是一种奇怪的行为。它跳过if
语句之后的初始行,并直接执行不应编译的代码,但请记住它不应该输入if
语句。它几乎就像编译器常量的存在导致if
语句看起来是一行,然后仍然在错误的范围内执行代码。
但是,如果我在结尾添加else
语句,代码执行正常;
if (data["someKey"] != null)//*
{
CONSOLE_OUT.info("Print some stuff.");
TARGET::myTarget
{
var someString:String = data["someKey"] as String;
someController.setSoemthing(someString.indexOf("soemthing") > -1 ? true : false);
}
}
else
{
CONSOLE_OUT.info("Print some other stuff.");
}
还应该注意的是,在data["someKey"]
求值为null以外的其他情况下,上述版本将正确跳过(或不编译)常量中的代码。
我只是想知道这是一个错误,还是我没有使用正确的编译器常量语法。如果您需要更多信息,请告诉我。我仔细检查了我的编译器常量,我使用Flash CS4来编译和定位Flash Player 10,如果这有所不同。
答案 0 :(得分:2)
它不是错误,编译器将删除任何if(false)语句,因此条件常量必须包含在条件评估中。
if (data["someKey"] != null)//*
{
CONSOLE_OUT.info("Print some stuff.");
if(TARGET::myTarget) // it should be conditional statement
{
var someString:String = data["someKey"] as String;//*
someController.setSoemthing(someString.indexOf("soemthing") > -1 ? true : false);//*
}
}
如果你看一下flex样本,他们已经在方法声明之外应用了符号,所以当你在成员体外编写条件编译符号时,会包含/排除成员体,但是如果是内联语句,flex无法确定是什么要排除,所以它应该在if中使用。
在此处查看答案和链接,
答案 1 :(得分:-3)
我不确定你在使用TARGET静态类做什么
我从来没有见过这样的东西,也不知道TARGET是什么,我不知道如何纠正它。
无论如何在if语句中测试someKey是否有值,但是如果someKey尚未定义,那么它将不为null undefined
。
说到这一点你需要测试它,正确的测试方法就是这样。
if( data.hasOwnProperty("someKey"){
CONSOLE_OUT.info("Print some stuff.");
TARGET::myTarget <<<<<<< WTH is this????????
{
var someString:String = data["someKey"] as String;
someController.setSoemthing(someString.indexOf("soemthing") > -1 ? true : false);
} }
另请注意,字符“/ *”表示注释块的开头,之后的所有代码都将被注释掉。
例如
/* this would be commented
this would be commented
*/
this line would not be commented
[编辑]
注意第一个“ie”是如何将属性显示为未定义的。
trace(null == undefined); //Outputs true
trace(null === undefined); //Outputs false
var i:Object;
trace(i); //Outputs null
i = {};
trace(i); //Outputs [object Object]
var i:Object = {a:"b", c:"d"};
trace(i.e); //Outputs undefined
i.e = "f";
trace(i.e); //Outputs f