2012-08-15 44 views
0

我收到错误:​​3210,我找不到原因。Javascript error'has no method push'

我知道sack[i]是对象,i是0和quantity_to_spawn等于1

我认为这点与推动,因为麻袋是一个数组,sack[i]实际上是一个对象的问题。

for (i=0;i<rows[r].quantity_to_spawn;i++){ 
     more_drops = Math.random() 
     sack[i]=new Array(); 
     for (;more_drops > .05;){ 
      more_drops = Math.random() 
      rarity = Math.random() 
      if (rarity <= .75&&typeof rows[r].common=="string"){//common drop 75% 
      item=rows[r].common.split(",") 
      sack[i].push(parseInt(item[parseInt(Math.random()*item.length)])) 
        ... 
+0

你外'for'循环之前宣布'sack'作为一个数组? – ZachB 2012-08-15 04:31:05

+0

如果我在那里看到几个'var'关键字,我会更舒服...... – 2012-08-15 04:32:59

+1

使用分号,它们不应该是可选的。为什么看起来一切都是全球性的? – epascarello 2012-08-15 04:34:41

回答

1

我敢肯定,你缺少声明变量sack为数组,

var sack = new Array(); 

var sack = []; 

否则它应该工作

这里是simple demo

我对这个问题做了一些实验,发现了一些有趣的事实。这些是,

问题是sack已被分配类似var sack = 'someValue';。在这种情况下(赋值字符串类型),这导致sack成为一个字符串数组。因此,作业sack[i]=new Array();是没有意义的。 sack[0]将是s。并尝试一些价值推到这将引发错误​​3210

另一种情况(赋值号型),分配是像var sack = 28892;。在这种情况下,相同的数组赋值没有任何意义。但是,如果您尝试将某些内容推送到sack[0],它将丢弃Cannot call method 'push' of undefined,因为sack[0]undefined

在这两种情况下,在将sack声明为某个值后,该赋值不会产生任何错误,尽管它没有用处。

有关数组声明的更多信息,

Javascript array declaration: new Array(), new Array(3), ['a', 'b', 'c'] create arrays that behave differently

+0

这不是问题。如果是这样,那么在第二个'for'循环之前会出现'undefined'的错误。 – Teemu 2012-08-15 06:07:58

+0

@Teemu不,如果将变量定义为'var sack;',那么会发生什么情况,显然不会有这样的错误。 – 2012-08-15 07:11:33

+0

在这种情况下,错误将是''不能在'sack [i] = new Array();'行中设置属性0,对象为null或undefined'。如果'sack'不是数组,则无法通过此行执行代码。OP有这样的错误:'对象0没有方法push',这表明对象(==='sack [0]')存在,但是在那个对象中没有叫做'push'的方法。 – Teemu 2012-08-15 07:29:07

0

不知道你在做什么,在这里,但试试这个:

var sack = []; 
for (var i=0;i<rows[r].quantity_to_spawn;i++) { 
    var more_drops = Math.random(); 
    sack[i] = []; 
    for (;more_drops > 0.05;) { 
     more_drops = Math.random(); 
     var rarity = Math.random(); 
     if (rarity <= 0.75&&typeof rows[r].common==="string") {//common drop 75% 
     var item = rows[r].common.split(","); 
     sack[i].push(parseInt(item[parseInt(Math.random()*item.length,10)],10)); 
     ... 
+0

这不可能是问题。如果是这样,那么在第二个'for'循环之前会出现'undefined'的错误。 – Teemu 2012-08-15 06:04:36

相关问题