- 배열이 아닌데 배열인 척 하는 애들을 유사 배열 객체이라고 한다.
- 문자열은 마치 배열처럼 인덱스를 통해 각 문자에 접근할 수 있고, 반드시
length
프로퍼티를 갖기 때문에 유사배열 객체이다!- 즉, 배열처럼 사용할 순 있지만 배열과 관련된 메소드를 사용할 수 없다. (push(), pop(), slice() 등)
var str = "string";
// 문자열은 유사 배열이므로 인덱스를 사용하여 각 문자에 접근할 수 있다.
console.log(str[0]); // "s"
// 원시 값인 문자열이 객체처럼 동작한다.
console.log(str.length); // 6
// 하지만, 문자열은 원시 값이므로 변경할 수 없다.
str[0] = "S";
console.log(str); // string
그렇다면 왜 배열이 아닌 유사배열 객체를 사용할까?
const number = {
0: "first",
1: "second",
2: "third",
length: 3,
};
console.log(number); // { '0': 'first', '1': 'second', '2': 'third', length: 3 }
number
객체가 바로 유사배열이다. 키가 숫자고, length라는 속성을 가지고 있다.number[0]
, number[1]
, number.length
같은 것을 모두 활용할 수 있다.배열과 유사배열을 구분해야 하는 이유는, 유사배열의 경우 배열의 메서드를 쓸 수 없기 때문이다.
함수에 전달된 인자의 수와 값에 대한 정보를 제공한다.
likeFood("Pork cutlet", "Udon");
function likeFood() {
console.log(arguments[0]); // 출력: 'Pork cutlet'
console.log(arguments[1]); // 출력: 'Udon'
console.log(arguments.length); // 출력: 2
}
객체에는 배열 메서드(push, slice)는 직접 적용할 수 없지만, 유사 배열 객체에는 call또는 apply 메서드를 이용해 배열 메서드를 적용할 수 있다.
var obj = {
0: 'a',
1: 'b',
2: 'c',
length: 3
};
Array.prototype.push.call(obj, 'd');
console.log(obj); // { 0: 'a', 1: 'b', 2: 'c', 3: 'd', length: 4 }
var arr = Array.prototype.slice.call(obj);
console.log(arr); // [ 'a', 'b', 'c', 'd' ]
Array.from()
을 사용하여 유사 배열 객체를 배열로 만들 수 있다.
const number = {
0: "first",
1: "second",
2: "third",
length: 3,
};
const array = Array.from(number);
console.log(array); // ["first", "second", "third"]
유사 배열 객체와 배열의 차이
https://www.zerocho.com/category/JavaScript/post/5af6f9e707d77a001bb579d2