2013-08-30 222 views
2

制作(跛脚)游戏,并且我想检查选定的正方形是否包含怪物,但是我的indexOf总是返回-1。下面的相关代码。JavaScript indexOf总是返回-1

intialization:

var monsters = []; 

var monsterPositions = [2,8,13,15,22]; 

var player = { "currentPosition": 0 }; 

for (var i in monsterPositions) { 
    monsters[i] = new createMonster("monster",monsterPositions[i],1); } 

function createMonster(name,startingPoint,level) { 
    this.currentPosition = startingPoint; } 

功能触发与<td>的onclick:

function processClick(trigger){ 
    console.log(trigger.id + " " + monsterPositions); 
    if (monsterPositions.indexOf(trigger.id) >= 0){ 
     if (!fight(findMonster(parseInt(trigger.id)))){ 
      return; 
     } 
    } 
    if (gameOn) move(parseInt(trigger.id)); 
} 

的页面总是去直接move(),即使它是一个怪物点,这里是console.log()结果:

1 2,8,13,15,22 adventure.js (line 79) 
2 2,8,13,15,22 adventure.js (line 79) 
7 2,8,13,15,22 adventure.js (line 79) 
8 2,8,13,15,22 adventure.js (line 79) 
13 2,8,13,15,22 adventure.js (line 79) 
18 2,8,13,15,22 adventure.js (line 79) 
23 2,8,13,15,22 adventure.js (line 79) 
22 2,8,13,15,22 adventure.js (line 79) 
21 2,8,13,15,22 adventure.js (line 79) 
20 2,8,13,15,22 adventure.js (line 79) 
15 2,8,13,15,22 adventure.js (line 79) 

(link here if above code isnt enough)和IM难倒帮助,请。(当然,否则为什么我在这里)

回答

4

trigger.id可能是返回一个字符串,其中你的阵列是满的数字。

This jsfiddle显示在操作中以及与数字一起使用以及如何使用parseInt()将字符串ID转换为数字。

+0

哦哇,我知道只是间隔,大声笑我以前,(如你可以看到我使用parseInt在下一行)谢谢。 –

+0

请确保_always_传递10作为'parseInt(trigger.id,10)' – arb

+0

是的第二个参数是什么呢?我真的没有得到整个“基数”的东西。 –

1

试试这个

if (monsterPositions.indexOf(Number(trigger.id)) >== 0) 
+0

我从来没有听说过'号码'之前我会检查它并尝试它,但'parseInt'是一个已知的有效函数,我不明白为什么它会工作。 –

+0

这是不好的做法,使用'数字' – arb

+0

pareInt是整数,但号码将与浮动,双,int,... –