Javascript基本计算总是得到NaN

时间:2016-07-05 20:15:40

标签: javascript

您好我正在为游戏做一个基本的计算器但是我遇到了一个问题我刚刚开始学习这种编程语言阅读了我找到的所有教程,现在我只是在制作一些代码并获得一些经验,所以我写了一个计算我之前在php中编写的代码是完美的但是我在那里使用不同的技术,所以在javascript中我创建了一个函数,它将被称为计算按钮将被按下并创建一个对象来存储所有数据5名球员看一看:

test "Can view and search schools" do
visit logout_path
visit schools_path
School.all.each do |school|
  page.must_have_content(school.name)
end

find(:xpath, '//*[@name="filter[USA]"]/..').click
School.all.each do |school|
  page.must_have_content(school.name) if school.country == 'Canada'
  page.wont_have_content(school.name) if school.country == 'USA'
end

find(:xpath, '//*[@name="filter[USA]"]/..').click
School.all.each do |school|
  page.must_have_content(school.name)
end

find(:xpath, '//*[@name="filter[Canada]"]/..').click
School.all.each do |school|
  page.wont_have_content(school.name) if school.country == 'Canada'
  page.must_have_content(school.name) if school.country == 'USA'
end
end

我使用了几个循环来存储她所在位置的所有数据,然后使用短函数在每一步之后通过速度属性缩短每个人我检查一切是否正常但最后我还是得到结果哪个是NaN可能有人帮我解决这个问题我已多次检查我的代码,但可以找到错误的地方,也许有些东西我不知道javascript而错过了

2 个答案:

答案 0 :(得分:1)

将您的总变量初始化为0

这样,totaldmg + = value不会导致totaldmg =“undefined + value;

var totaldmg = 0;
var damagerate = 0;
var damagegrow = 0; 
var furydmg = 0;

此外,从DOM中读取值时,将它们转换为数字,因为字符串文字将连接

for(var i = 0; i <5; i++){
  name[i] = parseInt(document.getElementById("ninja" + (i +1)).value, 10);
  dmg[i] = parseInt(document.getElementById("dmg" + (i +1)).value, 10); 
  dmgrate[i] = parseInt(document.getElementById("dmgrate" + (i +1)).value, 10); 
  dmggrow[i] = parseInt(document.getElementById("dmggrow" + (i +1)).value, 10); 
  speed[i] = parseInt(document.getElementById("speed" + (i +1)).value, 10); 
  fury[i] = 50;
  ninja[i] = new ninjas(name[i],dmg[i],dmgrate[i],dmggrow[i],speed[i],fury[i]);
}

答案 1 :(得分:0)

我不知道你想做什么以及代码应该如何工作,但是从这里查看你的代码是我能识别的第一个错误:

name[name.length]
dmg[dmg.length]
dmgrate[dmgrate.length]
speed[speed.length]
//etc

这是错误的。数组中的元素从0开始,到array.length - 1结束。这意味着name[name.length]不存在。

以下是有关javascript数组如何工作的一些链接:

http://www.w3schools.com/js/js_arrays.asp

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array

我希望这会对你有所帮助。我将继续看到你的代码,如果我发现任何其他错误,我将把它们添加到我的答案

2)这应该如何运作:

for(var i = 0; i <5; i++){
    name[name.length] = document.getElementById("ninja" + (i +1)).value;
    dmg[dmg.length] = document.getElementById("dmg" + (i +1)).value; 
    dmgrate[dmgrate.length] = document.getElementById("dmgrate" + (i +1)).value; 
    dmggrow[dmggrow.length] = document.getElementById("dmggrow" + (i +1)).value; 
    speed[speed.length] = document.getElementById("speed" + (i +1)).value; 
    fury[fury.length] = 50;
    //...
}

如果您尝试在javascript中向数组添加元素,name[name.length]就不是这样做的了。在上面的链接中,您可以使用array.push(arg);函数查看如何执行此操作。