일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- colllection
- Infresh
- 레퍼런스 복사
- 공헌감
- 쿠버네티스
- ESG
- node
- 이펙티브 자바
- 뉴 컨피던스
- HTML
- docker
- try width resources
- kubernetes
- java
- sentry
- 히든 스토리
- 부자의그릇
- apache kafka
- 도파민형 인간
- 칭기즈칸의 위대한 장군 수부타이
- CSS
- Container
- 비메모리 자원
- 수부타이
- 월칙
- 참조 계수
- 아웃풋법칙
- try-with-resources
- 과제의 분리
- 모두가 기다리는 사람
- Today
- Total
Hi
(javascript) 배열 본문
배열
굳이 크기를 지정하지 않아도 되며, 어떤 위치에 어느 타입의 데이터를 저장하더라도 에러가 발생하지 않는다.
배열 리터럴
새로운 배열을 만드는 데 사용하는 표기법. 대괄호 []를 사용
//배열 리터럴을 통한 5개 원소를 가진 배열 생성
var colorArr = ['orange', 'yello', 'blue', 'green', 'red];
console.log(colorArr[0]); // orange
console.log(colorArr[1]); // yellow
console.log(colorArr[4]); // red
배열의 요소 생성
동적으로 배열 원소를 추가할 수 있음
값을 순차적으로 넣을 필요 없이 아무 인덱스 위치에나 값을 동적으로 추가할 수 있음.
// 빈 배열
var emptyArr = [];
console.log(emptyArr[0]); //undefined
// 배열 요소 동적 생성
emptyArr[0] = 100;
emptyArr[3] = 'eight';
emptyArr[7] = true;
console.log(emptyArr);
// [100, undefined x 2, "eight", undefined x 3, true]
console.log(emptyArr.length); // 8
// 배열의 크기를 현재 배열의 인덱스 중 가장 큰 값을 기준으로 정하기 때문
배열의 length 프로퍼티
배열의 원소 개수를 나타내지만, 실제로 배열에 존재하는 원소 개수와 일치하는 것은 아님.
배열 내에 가장 큰 인덱스에 1을 더한 값이다.
var arr = [];
console.log(arr.length); // 0
arr[0] = 0; // arr.length = 1
arr[1] = 1; // arr.length = 2
arr[2] = 2; // arr.length = 3
arr[100] = 100;
console.log(arr.length); // 101
// 실제 메모리는 length 크기처럼 할당되지는 않는다.
배열 length 프로퍼티의 명시적 변경
var arr = [0, 1, 2];
console.log(arr.length); // 3
arr.length = 5;
console.log(arr); // [0, 1, 2, undefined x 2]
arr.length = 2;
console.log(arr); // [0, 1]
console.log(arr[2]); // undefined
// length 프로퍼티를 벗어나는 2번째 인덱스값인 '2'가 실제로 삭제된다.
배열 표준 메서드와 length 프로퍼티
push() 메서드와 length 프로퍼티
// arr 배열 생성
var arr = ['zero', 'one', 'two'];
// push() 메서드 호출
arr.push('three');
console.log(arr); // ['zero', 'one', 'two', 'three']
//length 값 변경 후, push() 메서드 호출
arr.length = 5;
arr.push('four');
console.log(arr); // ['zero', 'one', 'two', undefined, 'four']
length 프로퍼티는 배열 메서드에 동작에 영향을 줄 수 있다.
배열과 객체
배열 역시 객체. 하지만 일반 객체와는 약간 차이
// colorsArray 배열
var colorArray = ['orange', 'yellow', 'green'];
console.log(colorsArray[0]); // orange
console.log(colorsArray[1]); // yellow
console.log(colorsArray[2]); // green
// colorsObj 객체
var colorObj = {
'0': 'orange',
'1': 'yellow',
'2': 'green'
};
console.log(colorsObj[0]); // orange
// 자바스크립트 엔진이 []연산자 내에 숫자가 사용될 경우, 해당 숫자를 자동으로 문자열 형태로 바꿔주기 때문이다.
console.log(colorsObj[1]); // yellow
console.log(colorsObj[2]); // green
typeof 연산자 비교
console.log(typeof colorsArray); // object (not array)
console.log(typeof colorsObj); // object
// 배열과 객체가 모두 object
// length 프로퍼티
console.log(colorsArray.length); // 3
console.log(colorsObj.length); // undefined
// 배열 표준 메서드
colorsArray.push('red'); // ['orange', 'yellow', 'green', 'red']
colorsObj.push('red'); // Uncaught TypeError: Object #<Object> has no method 'push'
객체 - 객체 표준 메서드를 저장하고 있는 Object.prototype 객체 가 프로토 타입
배열 - Array.prototype 객체가 부모 객체인 프로토타입이 된다.
그리고 Array.prototype 객체의 프로토타입은 Object.prototype 객체가 된다.
배열의 프로퍼티 동적 생성
배열도 자바스크립트 객체이므로, 인덱스가 숫자인 배열 원소 이외에도 객체처럼 동적으로 프로퍼티를 추가할 수 있다.
// 배열 생성
var arr = ['zero', 'one', 'two'];
console.log(arr.length); // 3
// 프로퍼티 동적 추가
arr.color = 'blue';
arr.name = 'number_array';
console.log(arr.length); // 3
// 배열 원소 추가
arr[3] = 'red';
console.log(arr.length); // 4
// 배열 객체 출력
console.dir(arr);
배열에 동적 프로퍼티가 추가될 경우는 배열의 length값이 바뀌지 않는다. -> 배열의 length 프로퍼티는 배열 원소의 가장 큰 인덱스가 변했을 경우만 변경된다.
결국 배열도 객체처럼 'key: value' 형태로 배열 원소 및 프로퍼티 등이 있음을 알 수 있다.
배열의 프로퍼티 열거
for in 문이 되지만 불필요한 프로퍼티가 출력될 수 있으므로 for 문을 사용하는 것이 좋다.
for 문은 배열의 요소만을 정확히 출력
for (var prop in arr) {
console.log(prop, arr[prop]);
}
for (var i = 0; i < arr.length; i++) {
console.log(i, arr[i]);
}
배열 요소 삭제
배열도 객체이므로, 배열 요소나 프로퍼티를 삭제하는 데 delete 연산자를 사용할 수 있다.
var arr = ['zero', 'one', 'two', 'three'];
delete arr[2];
console.log(arr); // ["zero", "one", undefined x 1, "three]
console.log(arr.length); // 4
배열에서 요소들을 완전히 삭제할 경우 splice() 배열 메서드를 사용한다.
<splice() 배열 메소드>
splice(start, deleteCount, item...)
start - 배열에서 시작 위치
deleteCount - start에서 지정한 시작 위치부터 삭제할 요소의 수
item - 삭제할 위치에 추가할 요소
ex)
var arr = ['zero', 'one', 'two', 'three'];
arr.splice(2, 1); // 2번째 요소를 시작점으로 1개의 원소를 삭제한다. - 배열 요소를 완전히 없애게 된다.
console.log(arr); // ["zero", "one", "three"]
console.log(arr.length); // 3
Array() 생성자 함수
배열은 일반적으로 배열 리터럴도 생성하지만, 결국 Array() 생성자 함수로 배열을 생성하는 과정을 단순화
생성자 함수로 배열과 같은 객체를 생성할 때는 반드시 new 연산자를 같이 써야 한다.
Array()
- 호출할 때 인자가 1개이고, 숫자일 경우 : 호출된 인자를 length로 갖는 빈 배열 생성
- 그 외의 경우 : 호출된 인자를 요소로 갖는 배열 생성
var foo = new Array(3);
console.log(foo); //[undefined, undefined, undefined]
console.log(foo.length); // 3
var bar = new Array(1, 2, 3);
console.log(bar); // [1, 2, 3]
console.log(bar.length); // 3
유사 배열 객체
length 프로퍼티를 가진 객체
객체임에도 불구하고, 자바스크립트의 표준 배열 메서드를 사용하는 게 가능하다.
var arr = ['bar'];
var obj = {
name: 'foo',
length: 1
};
arr.push('baz');
console.log(arr); // ['bar', 'baz']
obj.push('baz'); // error
apply() 메소드를 사용하면 객체지만 표준 배열 메서드를 활용하는 것이 가능하다.
유사 배열객체도 배열 메서드를 사용하는 것이 가능하다.
var = arr = ['bar'];
var obj = { name : 'foo', length : 1 };
arr.push('baz');
console.log(arr); // ['bar', 'baz']
Array.prototype.push.apply(obj, ['baz']);
console.log(obj); // { '1': 'baz', name: 'foo', length: 2 }
'WEB(웹)' 카테고리의 다른 글
(javascript) 연산자 (0) | 2018.06.21 |
---|---|
기본 타입과 표준 메서드 (0) | 2018.06.21 |
(javascript) html 내용중 전의 내용을 가지고 온다. (0) | 2018.06.20 |
(javascript) 프로토타입 (0) | 2018.06.20 |
(javascript) 참조 타입의 특성 (0) | 2018.06.20 |