Javascript로 만드는 간단한 프로그램 작성중에 당혹스럽게 만들었던 부분이 있어 공유합니다.
Java에서 사용할때는 전혀 생각지도 않았던 것이 문제가 발생되네요..
지금 생각해보면 Java에서는 ConcurrentModificationException이 발생되었었네요.
일단 아래의 코드를 보겠습니다.
function test() { var array = ["1", "2", "3", "4", "5"]; console.log("===========Index를 활용한 반복문==========") for(var i=0; i<array.length; i++) { console.log(array[i]); } console.log("===========Array.pop() 을 사용한 반복분============"); array = ["1", "2", "3", "4", "5"]; for(var i=0; i<array.length; i++) { console.log(array.pop()); } console.log("==========선언부분에 길이 설정============="); array = ["1", "2", "3", "4", "5"]; for(var i= 0, len=array.length; i<len; i++) { console.log(array.pop()); } console.log("===========Enhanced For 반복문에 Array.pop() 사용============="); array = ["1", "2", "3", "4", "5"]; for(var i in array) { console.log(array.pop()); } console.log("==========================================") }
코드는 설명 부분이 필요 없을 정도로 간단합니다.
단지 차이가 있다면 선언부에 길이를 설정하는가 아니면 Java에서 말하는 Enhanced for를 사용해서 처리하느냐의 문제 입니다.
위의 코드를 실행하면 아래와 같은 결과를 얻습니다.
"===========Index를 활용한 반복문=========="
"1"
"2"
"3"
"4"
"5"
"===========Array.pop() 을 사용한 반복분============"
"5"
"4"
"3"
"==========선언부분에 길이 설정============="
"5"
"4"
"3"
"2"
"1"
"===========Enhanced For 반복문에 Array.pop() 사용============="
"5"
"4"
"3"
"=========================================="
정리하면 pop() 이나 shift() 를 사용하게 되면 배열에서 해당 정보가 빠지기 때문에 원하는 만큼 반복문이 실행되지 않습니다.