본문 바로가기
Javascript

유사배열객체(Javascript

by 지민재 2022. 7. 19.
반응형
SMALL

유사 배열 객체

  • 함수의 인수를 저장한 Arguments 객체
  • DOM의 document.getElementsByTagName 메서드, document.getElementsByName 메서드 등이 반환하는 NodeList 객체
  • 유사 배열 객체는 Array.prototype의 메서드를 사용할 수 없습니다. 그러나 배열로 참조하거나 대입할 수 있으며 for 문이나 for/in 문으로 반복 처리를 할 수 있습니다. 따라서 많은 자바스크립트 프로그램에서 배열로 다룰 수 있습니다.
  • 그러나 요소의 추가와 삭제 또는 length 프로퍼티값을 요소의 개수와 연계하는 등의 처리는 배열처럼 동작하지 않습니다.
  • 유사 배열 객체는 Array.prototype의 메서드를 직접 사용할 수 없습니다. 그러나 Function.prototype.call 메서드로 간접 호출하면 사용할 수 있습니다.
var a = {0:"A", 1: "B", 2: "C", length: 3};
Array.prototype.join.call(a, ","); // -> "A,B,C"
Array.prototype.push.call(a, "D"); // -> Object {0: "A", 1: "B", 2: "C", 3 : "D", length : 4}
Array.prototype.slice.call(a, 0); //  -> ["A", "B", "C", "D"] : 진짜 배열로 변환
var a = {0: 1, 1: 2, 2: 3, length: 3};
Array.prototype.map.call(a, function(c) { return v*v; }); // -> [1, 4, 9]

//이처럼 Array.prototype의 메서드를 유사 배열 객체에 적용할 수는 있지만 concat 메서드를 제외한 나머지 배열 메서드는 배열처럼 동작하지 않습니다.
var a = {0: "A", 1: "B", 2: "C", length: 3};
Array.prototype.concat.call(a, ["D", "E"]);
// -> [{0: "A", 1: "B", 2: "C", length : 3}, "D", "E"]
 

Array 타입의 객체의 장점

  • 0 이상의 정수 값을 프로퍼티 이름으로 갖는다.
  • length 프로퍼티가 있으며, 요소를 추가하거나 삭제하면 length 프로퍼티 값이 바뀐다. 또한 length 프로퍼티 값을 줄이면 그에 따라 배열 크기가 줄어든다.
  • 프로토타입이 Array.prototype 이므로 Array.prototype 의 메서드를 상속받아서 사용할 수 있다. 또한 instanceof 연산자로 평가하면 Array 생성자 함수로 생성된 객체로 표시된다.
  • 그러나 이러한 성질 중에서 프로퍼티 이름이 0이상의 정수이며 length 프로퍼티가 있는 객체는 대부분 배열로 다룰 수 있습니다. 이러한 객체를 유사 배열 객체 라고 합니다.

'Javascript' 카테고리의 다른 글

상속(Javascript)  (0) 2022.07.28
창 제어하기(Javascript)  (0) 2022.07.24
배열(Javascript)  (0) 2022.07.19
객체(Javascript)  (0) 2022.07.13
변수의 유효범위 , let , const(Javascript)  (0) 2022.07.13

댓글