[Javascript] 유사배열 arguments 객체
유사배열(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. 잘못된 내용이 있다면 댓글 남겨주시면 감사드리겠습니다.