纯Javascript,无法将变量分配给数组

纯Javascript,无法将变量分配给数组,javascript,Javascript,我还在学习JS(不是jquery)。所以在学习中,我从一个简单的游戏开始。我发现了一个问题。我无法让这些数组工作,因为它们正在生成NaN var clickMultiplier = 1.11; var idleMultiplier = 1.15; var idleBuffsCost = []; idleBuffsCost[0] = 100; var clickBuffsCost = []; clickBuffsCost[0] = 100; var trainerBuffsCost = []; t

我还在学习JS(不是jquery)。所以在学习中,我从一个简单的游戏开始。我发现了一个问题。我无法让这些数组工作,因为它们正在生成
NaN

var clickMultiplier = 1.11;
var idleMultiplier = 1.15;
var idleBuffsCost = [];
idleBuffsCost[0] = 100;
var clickBuffsCost = [];
clickBuffsCost[0] = 100;
var trainerBuffsCost = [];
trainerBuffsCost[0] = 1250;

for (i = 1; i <= 20; i++) {
  var j = i - 1;
  idleBuffsCost[i] += idleBuffsCost[j] * idleMultiplier;
  clickBuffsCost[i] = clickBuffsCost[i] + clickBuffsCost[j] * clickMultiplier;
  trainerBuffsCost[i] += trainerBuffsCost[j] * 1.25;
}
console.log(clickBuffsCost[0]); // works = 100
console.log(clickBuffsCost[1]); // does not work NaN
然而,这似乎不起作用。 你怎么认为?我不是看到了树的森林吗(我通常用php/mysql/pascal/qb64(以及其他派生语言)和其他一些语言编程——只是把JS添加到列表中了哈哈哈)

ps不同的作业是因为我尝试了不同的逻辑运算

多亏了这里的几个人,我犯了一个简单的错误。循环试图为尚未分配的索引分配值。这里是修复-我删除了+=并离开了=

idleBuffsCost[i] = idleBuffsCost[j] * idleMultiplier;
clickBuffsCost[i] = clickBuffsCost[j] * clickMultiplier;
trainerBuffsCost[i] = trainerBuffsCost[j] * 1.25;

特别感谢:@certainPeformance、@Wais Kamal和@David我希望我能对它们进行绿色检查。但他们还是很有帮助,谢谢大家

您需要初始化数组长度。例如,如果您知道一个数组中有20个元素,则应按如下方式初始化一个数组:

const testArr=新阵列(20)

或者,如果不知道数组的长度,可以使用array
push(…)
函数,而不是为数组的第i个元素编制索引并为其赋值。此方法意味着您不必初始化具有长度的数组


您可以在此处阅读更多内容:

您的代码中有一个小错误。搜索这行代码

clickBuffsCost[i] = clickBuffsCost[i] + (clickBuffsCost[j] * clickMultiplier);
改为:

clickBuffsCost[i] = clickBuffsCost[j] + (clickBuffsCost[j] * clickMultiplier); // notice the difference after the = part

由于
i
将从1开始,因此
clickbufscost[1]
未定义,因为
clickbufscost
在开始时仅包含一项。

这里是您出错的地方:

for (i = 1; i <= 20; i++) {
  var j = i - 1;
  idleBuffsCost[i] += idleBuffsCost[j] * idleMultiplier;
  clickBuffsCost[i] = clickBuffsCost[i] + (clickBuffsCost[j] * clickMultiplier);
  trainerBuffsCost[i] += trainerBuffsCost[j] * 1.25;
}

在循环的第一次迭代中,
i
的值为1,而
j
的值为0。您正在将
clickbufscost
的第二个元素设置为
clickbufscost[i]+(clickbufscost[j]*clickMultiplier)
clickBuffsCost[i]
(在本例中等于
clickBuffsCost[1]
)未定义,这就是调用
console.log(clickBuffsCost[0])时出现NaN的原因

我得到
未捕获引用错误:未定义idleMultiplier
idleMultiplier和clickMultiplier的值是多少
+=
与左侧的现有变量添加或连接,但每个
[I]
索引在循环开始时都是
未定义的
?数组中除索引0之外的元素是否以0开头?然后你必须首先将它们设置为0。我猜你希望所有的值都以0开头。因此,请在设置索引0中的值之前使用。然后设置它们,然后执行循环。不需要预先设置长度。有用提示:JS数组动态展开,只需要使用var arry=[];我看了两遍才明白你的意思。。让我核实一下。嗨。。我只是发布了一篇有冒犯性的文章,I,j,k在前面声明过。非常感谢您的澄清。当我调试这个的时候,由于某种原因我没有看到这个LOL。非常感谢!干杯小伙子来帮忙:)
for (i = 1; i <= 20; i++) {
  var j = i - 1;
  idleBuffsCost[i] += idleBuffsCost[j] * idleMultiplier;
  clickBuffsCost[i] = clickBuffsCost[i] + (clickBuffsCost[j] * clickMultiplier);
  trainerBuffsCost[i] += trainerBuffsCost[j] * 1.25;
}
clickBuffsCost[i] = clickBuffsCost[i] + (clickBuffsCost[j] * clickMultiplier);