🧊 Prototype of Array is Object.
일반적인 배열 하나를 선언하고 출력해보았다.
const arr = [3, 6, 9];
console.log(arr);
0,1,2 순서대로 잘 출력되고, 프로토타입도 Array인데 무슨 배열이 객체라는 걸까?
그렇다면 Array를 펼쳐보자.
Array를 펼쳐서 살펴보니 프로토타입이 Object라고 나온다!
그렇다. Array는 객체를 이어받아 만든 자료구조다.
🧊 숫자는 프로퍼티의 key일뿐.
1) 객체 프로퍼티에 접근하는 법
객체의 프로퍼티에 접근하기 위해서는 두가지 방법이 있다. 아래와 같이 . (점)을 사용하는 방법과, 대괄호로 접근하는 방법이 있다.
computer.name
computer["name"]
하지만 숫자는 . (점)을 사용할 수 없고, 대괄호로만 접근이 가능하다.
computer.1 //오류
computer[1]
따라서 자바스크립트 배열을 접근하기 위해 사용하는 arr[1] 에서 1은 숫자로 되어진 프로퍼티를 접근하기 위한 방법이다.
2) 숫자는 key일뿐.
여기서 0, 1, 2가 다른 언어처럼 순서를 가리키는 것 같지만, 그저 프로퍼티의 key가 숫자로 되어있을 뿐이다.
아래처럼 숫자 이외의 문자를 넣어버릴 수도 있다.
const arr = [3, 6, 9];
arr["hi"] = "welcome";
console.log(arr);
심지어 아래같은 행위도 가능하다.
const arr2 = Array(8);
arr2[10] = 10;
arr2.length = 18;
console.log(arr2);
할당된 범위를 넘어선 곳에 갑자기 할당하거나,
길이를 마음대도 바꾸어버리는 것 까지!
🧊 자바스크립트에서 배열
위에서 살펴본 것처럼 C언어의 배열처럼 같은 크기의 연속된 자료구조가 아니다.
자바스크립트의 배열은 객체로 이루어져있기 때문에 크기도, 타입도 정해져있지 않다. 연속된 자료구조도 아니다.
문자도 넣고, 숫자도 넣고, 크기가 자유롭다. 심지어 함수를 넣을 수도 있다. 😁
다만 객체가 상위 프로토타입일 뿐 엄연히 Array프로토타입이기 때문에 완전히 객체와 같지 않다. forEach, map 등등 여러가지 프로퍼티를 제공하고, length를 자동으로 늘려주는 편리한 기능을 제공한다.
✨ 객체처럼 key-value로 되어있다는 것을 처음 발견했을 때 신기했다.
✨ 제 스스로 이해한대로 설명한 부분이 있어, 틀리거나 부족한 내용이 있다면 알려주세요.