0

我已经用 javascript 构建了一个数组加载器。

这里是jsfiddle

当我直接单击最后一个时,我得到了未定义。我试图用这样的东西赶上它

var lastWord = (function() {

            return function() {
            var resultWord = wordArray[--count % wordArray.length];
                if (typeof resultWord == "undefined")
                { 
                return false;
                }
                else 
                {
                return wordArray[--count % wordArray.length];
                }
            }
        }

}());

但是没有用,有什么建议吗?

4

2 回答 2

0

第一次未定义的原因是因为 wordArray 中没有任何负数。在您点击更新之前没有“最后一个”字。那有意义吗?点击更新一次后它工作正常。

于 2012-12-04T20:51:38.143 回答
0

试试http://jsfiddle.net/ayQH2/2/

问题是模运算符返回的符号是其第一个操作数的符号。所以,例如

(-17) % 12 // == -5 , not 7

这可能会起作用,并且不包括额外的函数包装器:

var nextWord = function() {
    // silly work-around for negative modulus issue
    var index = (++count % wordArray.length) + wordArray.length
    return wordArray[index % wordArray.length];
};
var lastWord = function() {
    // silly work-around for negative modulus issue
    var index = (--count % wordArray.length) + wordArray.length
    return wordArray[index % wordArray.length];
};

还有很多其他方法可以解决这个问题。也许更好的方法是确保count永远不会超出适当的范围,做类似的事情

count = (count == wordArray.length - 1) ? 0 : count++; // increment
count = (count == 0) ? wordArray.length - 1 : count--; // decrement
于 2012-12-04T21:27:45.873 回答