2012-03-28 97 views
0

我有一个很简单的逻辑块如下:AS:if语句评估错误

var divert:Number = 0; 
for (var connection in _connections) { 
    trace("target: " + _connections[connection].target + " || i: " + (i + 1)); 
    if(int(_connections[connection].target) != (i + 1)) { 
     trace("bad connection"); 
     divert++; 
    } 
} 

的问题是,当i + 1int(_connections[connection].target)相等的if语句返回true如可在输出中看到我的trace()陈述如下:

target: 0 || i: 1 
bad connection 
target: 1 || i: 1 
bad connection 

任何人都可以看到什么可能导致这种情况发生?

编辑:这是包含在为每个请求的功能:

public function loadListener(i:Number, onProgress:Function, onComplete:Function):Void 
    { 
     trace("load listening to: "+i); 
     trace("next in queue: " + _queues["lower"][0] + " | " + _queues["upper"][0]); 
     _functions[i] = {onProgress:onProgress, onComplete:onComplete}; 
     if (_queues["lower"][0] != i + 1 || _queues["upper"][0] != i + 1) { 
      var divert:Number = 0; 
      for (var connection in _connections) { 
       trace("target: "+_connections[connection].target+" || i: "+(i+1)); 
       if(int(_connections[connection].target) != (i + 1)) { 
        trace("bad connection"); 
        divert++; 
       } 
      } 
      if (divert == _connections.length) { 
       _diversion = i + 1; 
       trace("divert: "+divert+" || connections: "+_connections.length); 
      } 
     } 
    } 
+0

什么是“我”在你的代码,可以宇展现出更加复杂的例子? – 2012-03-28 10:37:03

+0

@ DennisJaamann'i'只是一个变量,将其作为参数传递给函数。代码的其余部分很长且冗长,与此问题几乎无关。如果有帮助,我将用包含它的函数更新代码。 – 2012-03-28 10:39:28

+0

@sch'typeof(_connections [connection] .target)'返回'object',但它最初是一个数字,我将它转换为if语句中的一个数字int(_connections [connection] .target)'它的值是'0' – 2012-03-28 10:49:58

回答

1

首先,为什么要使用for(var)循环时,您可以使用

var divert:Number = 0; 
for each(var connection in _connections) { 
    trace("target: " + connection.target + " || i: " + (i + 1)); 
    if(int(connection.target) != (i + 1)) { 
     trace("bad connection"); 
     divert++; 
    } 
} 

为了进一步调试,更换

trace("target: " + connection.target + " || i: " + (i + 1)); 

trace("target: " + int(connection.target) + " || i: " + (i + 1)); 

如果这跟踪零,你知道问题在哪里。

你可以尝试做

if(connection.target.toString() != (i + 1).toString()) { 
+0

感谢跟踪'int(_connections [连接] .target)'输出'0',你知道它为什么会将它转换为'0'吗?我发现使用'parseInt()'虽然工作,你的字符串方法也是如此。此外,我实际上在AS2中工作,我们不能在每个循环中使用'',但将其标记为AS3,因为我将该问题看作版本不可知的。谢谢。 – 2012-03-28 12:34:36