我第一次尝试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循环之后调用它!”警报,然后没有。
我花了一段时间用谷歌搜索并试图解决这个问题,但似乎我的智慧结束了。
答案 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
相同这永远不会成真。
: - (