2021. 7. 26. 19:40ㆍCSE/Java Script
1. 배열 선언 방법
(1) 요소의 값을 포함해서 선언하기
var arr = ['one', 'two', 'three'];
(2) 빈 배열 선언하기
var arr = [];
2. 배열의 요소 생성
- 자바 스크립트의 경우, 값을 순차적으로 넣을 필요 없이 아무 인덱스 위치에나 값을 동적으로 추가할 수 있음
var emptyArr = [];
console.log(emptyArr[0]); //undefined
emptyArr[0] = 100;
emptyArr[3] = 'eight';
emptyArr[7] = "true";
console.log(emptyArr); //[ 100, undefined * 2, 'eight', undefined * 3, 'true' ]
console.log(emptyArr.length); //8
3. 배열의 length 프로퍼티
- length는 실제 배열 내의 원소 개수와 일치하는 것이 아니라, 최대 인덱스 + 1이랑 일치한다
var emptyArr = [];
emptyArr[100] = 100;
console.log(emptyArr.length); //101
- 또한 length는 명시적으로 값을 변경할 수도 있다.
=> length 프로퍼티를 벗어나는 값은 삭제되고, 이 후 length를 늘려도 복구되지 않는다.
var arr = [0,1,2];
console.log(arr.length); //3
arr.length = 5;
console.log(arr); //[0,1,2,undefined*2]
arr.length = 2;
console.log(arr); //[0,1]
arr.length = 3;
console.log(arr); //[0,1,undefined]
- 자바스크립트의 표준 배열 메소드는 length 프로퍼티를 기반으로 동작한다
=> push() 메소드의 경우 배열의 현재 length 값의 위치에 새로운 원소값을 추가하는 것과 동일하다
=> length 프로퍼티는 배열 메소드의 동작에 영향을 줄 수 있으므로 굉장히 중요하다!!
4. 배열과 객체의 차이점
- 배열 또한 객체이다. 하지만 일반 객체와 약간의 차이점이 있다.
//배열
var arr = ['orange', 'yellow', 'red'];
console.log(arr[0]);
console.log(arr[1]);
console.log(arr[2]);
//객체
var obj = {
'0' : 'orange',
'1' : 'yellow',
'2' : 'red'
}
console.log(obj[0]);
console.log(obj[1]);
console.log(obj[2]);
/*
왜 '0'이 아니라 0인데 되는거지?
=> 숫자가 오면 자동으로 문자열로 변환해줌
*/
//type of 비교
console.log(typeof arr); //object
console.log(typeof obj); //object
//length 프로퍼티
console.log(arr.length); //3
console.log(obj.length); //undefined
//일반 객체는 length 프로퍼티를 가지고 있지 않다 => 따라서 undefined
//배열 표준 메소드
arr.push('blue');
obj.push('blue'); //error 발생
/*
일반 객체의 경우 Object.prototype 객체가 프로토타입이다
=> 따라서 배열 표준 메소드 사용 불가
하지만, 배열의 경우 Object.prototype를 프로토타입으로 갖는 Array.prototype 객체가 프로토타입이다
=> 따라서 배열 표준 메소드와 Object.prototype의 표준 메소드 모두 사용 가능
*/
5. 배열의 프로퍼티 동적 생성
- 배열도 객체이므로 인덱스가 숫자인 배열 원소 외에도 동적으로 프로퍼티를 추가할 수 있다
- 다만 숫자인 배열 원소가 증가할 때만 length 값도 증가하게 된다
var arr = ['zero', 'one', 'two'];
console.log(arr.length); //3
arr.color = "red";
arr.name = "number array"
console.log(arr.length); //3
arr[3] = "blue";
console.log(arr.length) //4
console.log(arr); //[ 'zero', 'one', 'two', 'blue', color: 'red', name: 'number array' ]
6. 배열과 for문의 활용
- 배열 또한 객체이므로 for in 문을 사용할 수 있다.
- 파이썬과 비슷하게 사용할 수 있다.
for (var prop in arr){
console.log(prop,":", arr[prop]);
}
/*
0 : zero
1 : one
2 : two
3 : blue
color : red
name : number array
*/
7. 배열 요소 삭제
- delete 문으로 삭제를 할 수 있는데, 이 때 인덱스가 앞으로 당겨지는 것이 아니라, 그 부분이 undefined가 된다.
var arr = ['zero', 'one', 'two'];
delete arr[1];
console.log(arr); //['zero',undefined,'two'];
- undefined가 아니라 아예 삭제하기 위해서는 splice() 배열 메소드를 사용하자.
var arr = ['zero', 'one', 'two', 'three'];
arr.splice(2,1); //2번째 요소를 시작점으로 한 개의 원소를 삭제한다.
console.log(arr); //[ 'zero', 'one', 'three' ]
8. Array() 생성자 함수를 이용한 배열 생성
- 위에서 사용한 배열 리터럴 방법으로 배열을 생성하는 것도 결국 Array() 생성자 함수로 배열을 생성하는 과정을 단순화 한 것이다.
- Array() 생성자 함수는 인수의 개수에 따라서 동작이 다르다.
=> 1개이고 숫자인 경우 : 호출된 인자를 length로 갖는 빈 배열 생성
=> 그 외의 경우 : 호출된 인자를 요소로 갖는 배열 생성
var arr1 = new Array(3);
console.log(arr1); //[undefined*3]
console.log(arr1.length);//3
var arr2 = new Array(1,2,3);
console.log(arr2); //[1,2,3]
console.log(arr2.length); //3
9. 유사 배열 객체(array-like objects)
- 유사 배열 객체 : length라는 프로퍼티가 있는 일반 객체
- 유사 배열 객체의 경우 배열이 아니므로 push() 메소드를 호출하면 에러가 발생한다.
=> apply() 메소드를 사용하면 표준배열 메소드를 활용하는 것이 가능하다
var obj = {name : 'foo', length : 1};
//obj.push('baz'); //error 발생
Array.prototype.push.apply(obj,['baz']);
console.log(obj); //{ '1': 'baz', name: 'foo', length: 2 }
'CSE > Java Script' 카테고리의 다른 글
[Java Script] 함수와 프로토타입 체이닝 1 (0) | 2021.07.30 |
---|---|
[Java Script]데이터 타입과 연산자 3 (기본 타입과 표준 메서드, 연산자) (0) | 2021.07.27 |
[Java Script]데이터 타입과 연산자 2 (참조타입, 프로토타입) (0) | 2021.07.22 |
[Java Script]데이터 타입과 연산자 1 (0) | 2021.07.19 |
[JavaScript] 한 시간만에 끝내는 Node.js 입문 강의 듣기 (0) | 2020.11.23 |