在简单的js for-loop中找不到问题

时间:2012-12-18 08:04:48

标签: javascript

我第一次尝试javascript(或多或少),并发现自己完全被以下.js脚本困惑。

var pair = newArray();
var id = newArray();
var pairs = 2;

function newGame(){

    var randomid = 0;

    alert("newGame() called!");

    // Sets a specific part of the image sprite to each pair[].
    for (var i=0 ;i < pairs; i++){
        alert("For loop started!");
        pair[i] = "url(Cardfront.jpg) -"+100 * Math.floor((Math.random()*13)+0)+"px -"+200 * Math.floor((Math.random()*4)+0)+"px";
        // For every pair, assigns a part of the image sprite to two id[]-s.
        alert("Pair " + i + "is " + pair[i]);
        for(var j=0; j < 2; j++) {
            //the range of possible id-s the total number of cards - double the amount of pairs.
            randomid = Math.floor((Math.random()*pairs*2)+0);
            if (id[randomid] === null){
                id[randomid] = pair[i];
                alert("ID " + randomid + "is " + id[randomid]);
            }
            else j--;
        }
    }

    alert("This is called after the for loop!");
}

当我通过按钮调用newGame()时,我收到“newGame()调用!”然后“在for循环之后调用它!”警报,然后没有。

我花了一段时间用谷歌搜索并试图解决这个问题,但似乎我的智慧结束了。

3 个答案:

答案 0 :(得分:3)

newArray()更改为new Array()我认为这是导致您的错误的原因先生。

祝你好运!

编辑:要修复我发现的其他错误,您有以下内容:

if (id[randomid] === null) {

标有3 =个符号。将其更改为两个:

if (id[randomid] == null) {

它应该按照你期望的方式工作。 除非你真的试图使用严格的比较算子,否则你的代码会有其他的错误。

答案 1 :(得分:1)

在这段代码中:

if (id[randomid] === null){
    id[randomid] = pair[i];
    alert("ID " + randomid + "is " + id[randomid]);
}
else j--;

您无法混合使用if/else简写:

if(something)
    //Do X
else
    //Do y

用括号表示法:

if(something){
    //Do X
} else {
    //Do y
}

因此,请在else

周围加上括号
if (id[randomid] === null){
    id[randomid] = pair[i];
    alert("ID " + randomid + "is " + id[randomid]);
} else {
    j--;
}

答案 2 :(得分:0)

for循环应为:

for (var i=0; i<pairs.length; i++) {
   ...
}

pairs被强制转换为数值(在本例中为零),因此第一次比较(i<pairs)将与0<0相同这永远不会成真。

: - (