JavaScript

JavaScript 배열과 유사배열(call)

태인킴 2020. 7. 4. 15:28
반응형


JavaScript의 배열유사 배열에 대해서 알아 보겠습니다.

var array = [1, 2, 3];                      // [1, 2, 3]
var nodes = document.querySelectorAll('a'); // NodeList [a, a, a, ...]

위 예제에서 array는 배열이고, nodes는 유사배열입니다. 둘 다 []로 감싸져 있거든요. 그럼, Array.isArray 메서드 또는 instanceof Array 를 사용해서 어떤것이 배열인지 확인해 보도록 하겠습니다.

Array.isArray(array); // true
Array.isArray(nodes); // false

array instanceof Array; // true
nodes instanceof Array; // false

array는 직접 [] 리터럴을 사용하여 선언 하였기 때문에 배열 입니다. nodes는 유사배열 입니다.

var heights = {
  0: '172',
  1: '162',
  2: '182'
};

heights 객체는 유사배열 입니다. 유사배열의 경우는 Array의 메서드를 쓸 수 없습니다.

array.forEach(function(elem) { console.log(elem); });   // 1, 2, 3
heights.forEach(function(elem) { console.log(elem); }); // Uncaught TypeError

heights에 forEach같은 배열 메서드를 사용하면 Uncaught TypeError 에러가 발생합니다. 배열이 아니므로 발생하는 것입니다. 배열의 forEach 메서드를 빌려서 사용할 수 있습니다. 바로 call 이라는 배열의 프로토타입 메서드를 이용해서 가능합니다. 

Array.prototype.forEach.call(heights, function(elem) { console.log(elem); });

 

반응형

'JavaScript' 카테고리의 다른 글

JavaScript split 함수  (0) 2020.07.10
(==) 형변환 비교 (===) 엄격한 비교  (0) 2020.04.29
undefined 타입  (0) 2020.04.29
oninput onchange Event  (0) 2020.04.28
JSON.stringify JSON.parse  (0) 2020.04.26