2012-03-28 142 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