AS:if语句评估错误
问题描述:
我有一个很简单的逻辑块如下: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 + 1
和int(_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);
}
}
}
答
首先,为什么要使用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
什么是“我”在你的代码,可以宇展现出更加复杂的例子? – 2012-03-28 10:37:03
@ DennisJaamann'i'只是一个变量,将其作为参数传递给函数。代码的其余部分很长且冗长,与此问题几乎无关。如果有帮助,我将用包含它的函数更新代码。 – 2012-03-28 10:39:28
@sch'typeof(_connections [connection] .target)'返回'object',但它最初是一个数字,我将它转换为if语句中的一个数字int(_connections [connection] .target)'它的值是'0' – 2012-03-28 10:49:58