2012-08-15 75 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

相關問題