2007년 1월 9일 화요일

Prototype.js사용 시 Array에서 에러가 나는 경우..

Prototype.js를 사용하는 경우 가끔씩, Array처리하는 코드에서 에러가 발생하곤 하였습니다. 이 때 debugging을 해보면 Array의 마지막에 Array를 구동하는 function의 코드가 나오는게 원인이었습니다.

발생하는 부분이 for(index in loop)의 'for in' style의 루프에서만 발생하여서 'for in' 루프를 사용하지 않았었는데요. Ajaxian에 관련한 기사가 있었네요.

Problem
JavaScript에서 다음과 같은방법 Associative Array를 사용하는 경우에 Array.length값은 갱신이 되지 않습니다. 따라서, for in 스타일의 루프를 사용하게 되면 값을 length가 0이므로 오동작하게 됩니다.
var hardcoreBands = new Array();
hardcoreBands["mathyGoodnes"] = "Dillinger Escape Plan";
hardcoreBands["legendary"] = "Converge";
hardcoreBands["fashionistas"] = "Every Time I Die";

alert(hardcoreBands.length);
for in 스타일의 루프를 사용하지 않고, for(var i=0; i < array.length; i++) 스타일의 루프도 동작을 하지 않습니다.
User inserted image
Solution
Associative Array를 생성해서 사용하는 경우에 String을 key로 사용하지 않고 index를 사용합니다. 또는, Prototype.js의 Hash클래스를 사용하는 것이 나을 것 같습니다.

출처 : Javascript Associative Arrays considered harmful

댓글 4개:

  1. 뭔 말인지 모르게쌈...

    나 요즘 아이디어 구상중인데 니가 개발좀 해볼텨??

    우리도 돈좀 벌어야 하지 않겠삼?

    답글삭제
  2. @델버 - 2007/01/09 07:47
    그래? 그럼 우리 만나서 밥먹으면서 얘기함 해봐야겠네~

    대신에 밥값은 댁이내삼~~~

    답글삭제
  3. @옷장수 - 2007/01/09 09:40
    카드는 니꺼 쓰고?

    답글삭제
  4. @델버 - 2007/01/09 07:47
    당삼 카드는 댁꺼 ㅋ

    답글삭제