배열
배열은 객체이다.
배열을 선언하는 방법은 두가지다.
let arr = new Array();
let arr = [];
let arr = ['abc', {name:'1313'}, false, function(){ return 'not'}];
배열은 기본적으로 Queue
, Stack
이란 자료구조를 지원한다.
Queue
는 push
, shift
Stack
는 push
, pop
으로 구현할 수 있다.
단순히 Stack
, Queue
를 구현하려고 하지 않아도 push
, shift
, pop
함수를 사용할 수 있다.
push
: 배열의 끝에 요소를 추가한다.
pop
: 배열의 끝 요소를 제거하고 제거한 요소를 반환한다.
shift
: 배열의 앞(첫번째) 요소를 제거하고 제거한 요소를 반환한다.
unshift
: 배열의 앞에 요소를 추가한다.
arr[0]
같은 방식은 객체 문법에서 왔다고 한다.예제
let fruits = ['바나나는 맛있어'];
let copy = fruits;
console.log(fruits === copy); // true
fruits.push('사과도 맛있어');
console.log(copy); // 바나나는 맛있어, 사과도 맛있어
인접한 메모리 공간에 차례로 저장
해 연산 속도를 높인다!let fruits = [];
fruits[131313] = 5;
fruits.power = 99999999; // 배열은 객체당
위와 같은 상황에서는 배열이 배열답지 않게 동작하게 되어 제대로 사용할 때와 다르게 최적화 되지 않는다.
순서가 있는 자료
를 저장하기 위한 용도로 만들어진 자료구조이며,순서가 있는 자료
구조를 사용하지 않는다면 객체를 사용하는걸 권장!push
, pop
는 빠르고 shift
, unshift
는 느리다.배열의 전용 반복문이 있다.
바로 for..of
~~!!! -- 근데 나는 map을 더 쓴다.
for..in
과의 차이점? -- 'property'
, 객체를 위한 반복문이다
length
Property배열의 length 는 자동으로 갱신된다. (위에 push, pop 을 사용할 때 참조)
length = 0
let arr = new Array(100);
console.log(arr[99]); // 결과는?
배열객체에는 toString
메서드가 구현되어 있으며, 호출하면 배열의 모든 요소를 쉼표
로 구분한 문자열이 반환된다.
배열에는 Symbol.toPrimitive
, valueOf
메서드가 없기 때문에, 배열은 형 변환이 일어날 때 문자열로 변환됩니다.