2012-08-15 5 views
0

오류가 발생합니다 : object 0 has no method 'push', 나는 이유를 알 수 없습니다.Javascript 오류 '메서드 푸시가 없습니다'

나는, sack[i] 오브젝트 것을 알고 i는 0이고 quantity_to_spawn 내가 그 노드가 자루가 배열이고 sack[i] 실제로 객체이기 때문에 추진에 문제가 있다고 생각 1.

같습니다.

var sack = new Array(); 

또는

그렇지 않으면
var sack = []; 

그것이

여기

작동합니다

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

+0

거기에 몇 개의'var' 키워드를 본다면 더 편할 것입니다 ... –

+1

세미콜론을 사용하십시오. 옵션이 아니어야합니다. 왜 그것은 모든 것이 또한 세계적인 것처럼 보이는가? – epascarello

답변

1

난 당신이 배열로 변수 sack를 선언 누락 확신은 simple demo입니다

이 문제에 대해 약간의 실험을했는데 흥미로운 사실을 발견했습니다. 그것들은

sack이 이미 var sack = 'someValue';과 같은 것으로 할당되어 있습니다. 이 경우 (할당 된 값 문자열 유형), sack이 문자열 배열이됩니다. 따라서 할당 sack[i]=new Array();은 의미가 없습니다. sack[0]s입니다. 및 object 0 has no method 'push'

또 다른 경우 (할당 된 값 번호 형), 할당 var sack = 28892;처럼 오류를 발생합니다이 일부 값을 밀어하려고합니다. 이 경우 같은 배열 할당이 의미가 없습니다. 그러나 sack[0]에 뭔가를 푸시하려고 시도하면 sack[0]undefined이므로 Cannot call method 'push' of undefined을 던집니다.

두 경우 모두 sack을 일부 값으로 선언 한 후 할당은 쓸모가 없지만 오류를 생성하지 않습니다.

배열 선언에 대한

추가 정보,

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

+0

이것은 문제가 될 수 없습니다. 만약 그렇다면, 두번째'for' 루프 바로 전에'sack is undefined'가 던져 질 것입니다. – Teemu

+0

@Teemu 아니요, 변수가'var sack; '으로 정의되면 어떻게 될까요? 분명히 그런 오류는 없을 것입니다. –

+0

이 경우 오류는 'sack [i] = new Array();'줄에서'속성 0을 설정할 수 없습니다. 객체가 null이거나 정의되지 않았습니다. '오류가 발생합니다. 'sack'이 배열이 아닌 경우이 줄을 지나면 코드를 실행할 방법이 없습니다.OP는이 에러를 가지고 있습니다 :'object 0은 메소드 push가 없습니다. '이것은 객체 (==='sack [0]')가 존재 함을 알려주지 만, 그 객체에는'push'라는 메소드가 없습니다. – Teemu

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' 루프 바로 전에'sack is undefined'가 던져 질 것입니다. – Teemu

관련 문제