Programming/Javascript

[Javascript] 유사배열 arguments 객체

cbw1030 2019. 2. 17. 23:10
반응형

유사배열(Array-like)이란? 

배열처럼 index를 통해 접근 가능한 것을 유사배열이라고 한다.


arguments?

자바스크립트에서는 인자를 포함해 함수를 호출할 때 암묵적으로 arguments가 생성된다.

정확히 말하자면 arguments 객체이다.  arguments 객체는 함수를 호출할 때 넣었던 인자들이 배열 형태로 저장되어 있다.

하지만, 배열과 다르게 유사배열이 때문에 배열 메소드를 사용할 수 없다. (length, index를 통한 접근은 가능)

function arrayLike(a, b) {

for (var i = 0; i < arguments.length; i++) {

console.log(arguments[i]);

}

}


arrayLike(3, 4, 5, 6) // 3 ~ 6 까지 차례대로 출력된다.


만약에 배열 메소드를 사용한다면 어떻게 될까?



위와 같이 TypeError가 발생한다.



그런데 가끔 코딩을 하다가 arguments 객체를 유사배열이 아닌 배열로 이용해야 할 경우가 생긴다.

물론 빈 배열을 만들고 for문을 돌려 push를 하면 만들 수 있긴 하지만 한 줄로 끝낼 수 있는 좋은(?) 구문이 있다.

바로 Array.prototype.slice.call(arguments)이다.


이 부분을 이해하려면 call()과 apply()의 개념 이해가 필요하다.(업로드 예정)

function foo(a, b) { var arg = Array.prototype.slice.call(arguments); arg.forEach(function(el, index, array) { array[index] += 100; }); console.log(arg); }

foo(1, 2) // [101, 102]

위와 같이 변수 arg는 꼼수(?)를 통해 arguments를 배열로 만들었기 때문에 배열 메소드 forEach를 사용할 수 있다.





p.s. 잘못된 내용이 있다면 댓글 남겨주시면 감사드리겠습니다.

반응형