1

我第一次尝试(或多或少)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 循环之后调用的!” 警报,然后什么都没有。

我花了一段时间在谷歌上搜索并四处寻找,试图弄清楚这一点,但似乎我已经无能为力了。

4

3 回答 3

3

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

祝你好运!

编辑:要修复另一个错误,我发现您有以下内容:

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

带 3 个=标志。将其更改为仅两个:

if (id[randomid] == null) {

它应该按照您期望的方式工作。除非您真的在尝试使用严格的比较运算符,否则您的代码会有其他问题。

于 2012-12-18T08:08:18.710 回答
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--;
}
于 2012-12-18T08:19:25.143 回答
0

for 循环应该是:

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

pairs被强制转换为数值(在这种情况下为零),因此第一个比较 ( i<pairs) 将与0<0永远不会为真的比较相同。

:-(

于 2012-12-18T08:07:34.357 回答