본문 바로가기

JavaScript/Basic-Javascript

자바스크립트 정리하며 배우기[12] - 배열 개념 및 특성, 배열 선언 방법, 요소 생성, 프로퍼티 생성과 삭제

안녕하세요. Tay 입니다.

배열 이라는 객체에 대해서 알아보겠습니다.

 

 

배열

여러 데이터들을 모아서 하나의 객체로 관리하는데, 이때의 객체가 배열이다.

 

자바스크립트 배열의 특성

  • 굳이 크기를 지정하지 않아도 된다.
  • 어떤 위치에 데이터를 넣어도 된다.
  • 어느 타입의 데이터를 저장하더라도 에러가 발생하지 않는다.

 

배열 리터럴

객체 리터럴이 중괄호 { } 를 이용한 표기법이었다면, 배열 리터럴은 대괄호 [ ] 를 사용한다.

 

1) index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script src="array.js"></script>
</body>
</html>

 

2) array.js

array.js

// make array from literal
let foodArr = ["pizza", "kimchi", "galbi", "sushi"];

console.log(foodArr[1]);
console.log(foodArr[3]);

 

  • 배열 리터럴은 대괄호 [ ] 안에 각 요소의 값 만 나열 하면 된다.
  • 배열 의 원소에 접근 하려면 [ ] 안에 원소의 인덱스 값 을 넣어서 접근한다.

배열 리터럴로 4개 문자열 요소를 가진 배열을 생성했다.

첫번째 콘솔은 1번 원소를 출력하고, 두번째 콘솔은 3번 원소를 출력했다.

 

어떤 결과가 출력 될까?

 

Github Commit

 

 

결과 :

array index 1, 3

["pizza""kimchi""galbi""sushi"] 의 1 번과 3번이 각각 "kimchi" 와 "sushi" 가 출력됐다.

그 이유는 무엇일까?

 

자바스크립트 배열의 순서는 0 부터 시작합니다.

그렇기때문에 인덱스 0번에 있는 것이 첫번째 요소입니다.

 

빈 배열 만들기

값을 가지고 있지않은 빈 배열을 만들기 위해서는 var arr = []; 로 대괄호 [ ] 에 아무것도 적지 않으면 된다.

 

 

배열의 요소 동적 생성

위에 설명했듯이 자바스크립트의 배열은 어떤 위치(인덱스)에나 값을 동적으로 추가할 수 있다.

 

1) array.js

arrary.js

// make array from literal
let foodArr = ["pizza", "kimchi", "galbi", "sushi"];

console.log(foodArr[1]);
console.log(foodArr[3]);

// add array new elements
foodArr[5] = "spaghetti";
foodArr[7] = 50;
foodArr[10] = false;

console.log(foodArr);

 

기존 foodArr 배열에 동적으로 인덱스 5, 7, 10번에 데이터를 삽입했다.

 

log 로 출력해본 배열 foodArr 의 결과는 어떨까?

 

Github Commit

 

 

결과 :

chrome result

chrome에서는 empty 로 표기 되어있다. 실제로는 undefined 이다.

위 결과를 보면 알 수 있듯이, index 4, 6 그리고 8, 9 는 생략되고, index 5, 7, 10번이 생성 되었다.

 

explorer result

empty 라는 자료형이 있는지 확인하기 위해 explorer 에서도 확인했다.

역시나 undefined 였다. 하지만 explorer 에서는 prototype 이 안보인다...;;

 

아무튼 우리는 empty 인지 undefined 인지가 중요한게 아니다.

 

배열의 길이 length

우리는 마지막 인덱스 10번에 데이터를 넣었다. 중간에 undefined 있으나, 마지막순번이 10이다.

배열의 길이는 가장 큰 인덱스(마지막 순번) + 1 이 된다.

 

위 사진의 index 10 아래에 length 라는 프로퍼티가 있다.

모든 배열은 이러한 length 프로퍼티가 있고, 이 length 는 가장 큰인덱스(10) + 1 값을 가진다.

 

 

배열 객체 프로퍼티 생성

배열도 객체이며, 프로퍼티를 동적으로 생성할 수 있다.

 

1) array.js

array.js

// make array from literal
let foodArr = ["pizza", "kimchi", "galbi", "sushi"];

console.log(foodArr[1]);
console.log(foodArr[3]);

// add array new elements
foodArr[5] = "spaghetti";
foodArr[7] = 50;
foodArr[10] = false;

console.log(foodArr);

foodArr.name = "foodList";
console.log(foodArr);

foodArr 이라는 배열에 name 이라는 프로퍼티를 추가했다.

 

Github Commit

 

결과 :

add property result

 

콘솔로 출력된 값을 보면, name : "foodList" 가 추가 된 것을 확인해볼 수 있다.

 

이러한 객체 프로퍼티 추가는 length 에 영향을 미치는지 프로퍼티를 삭제하며 확인해보자.

 

 

배열 객체 프로퍼티 삭제

생성된 프로퍼티를 삭제할 수 있다.

 

1) array.js

delete property

// make array from literal
let foodArr = ["pizza", "kimchi", "galbi", "sushi"];

console.log(foodArr[1]);
console.log(foodArr[3]);

// add array new elements
foodArr[5] = "spaghetti";
foodArr[7] = 50;
foodArr[10] = false;

console.log(foodArr);

foodArr.name = "foodList";
console.log(foodArr);

delete foodArr.name;
console.log(foodArr);

name 이라는 프로퍼티를 추가하여 콘솔로그로 확인하고, 그 다음 프로퍼티를 삭제한 후 콘솔로 확인해보면 결과가 어떻게 출력되는지 확인해보자.

 

 

Github Commit

 

결과 :

delete property result

  1. 동적으로 name 프로퍼티를 추가하고 콘솔에서 확인했다.
  2. delete 로 name 프로퍼티를 삭제하고 콘솔에서 확인했다.
  3. 객체 프로퍼티의 추가 또는 삭제시 length 에는 변화가 없다.

 

정리 :

  • 배열은 데이터 요소동적으로 추가 할 수 있고, 아무 위치에나 값을 저장 할 수 있다.
  • 인덱스 5번은 문자열, 7번은 숫자형, 10번은 불린값 이다. 즉, 배열은 어느 타입을 저장하더라도 에러가 발생하지 않는다.
  • length 프로퍼티는 배열의 길이를 나타내고, length 는 배열의 가장 큰 인덱스 값 + 1 이 된다.
  • 모든 배열은 배열의 길이를 갖고있는 length 프로퍼티가 있다.
  • 배열 객체 프로퍼티 추가, 삭제 시 length 는 변화하지 않는다.

 

 

이 글은 개인 공부목적으로 작성되었습니다.

정보가 잘못 되거나 궁금한 사항은 댓글로 부탁드립니다!! 읽어주셔서 감사합니다.