배열은 둘 이상의 값을 가질 수 있는 특수 변수이다.
항목 목록이 있는 경우 자동차를 단일 변수에 저장하면 다음과 같을 수 있다 :
let car1 = "Saab";
let car2 = "Volvo";
let car3 = "BMW";
하지만 자동차를 반복해서 특정 자동차를 찾으려면 어떻게 해야 할까?
그리고 3대가 아니라 300대가 있다면 어떨까?
이때 Array[]를 사용한다.
배열은 하나의 이름으로 많은 값을 가질 수 있으며, 인덱스 번호를 참조하여 값에 접근할 수 있다.
배열 리터럴을 사용하는 것이 JS배열을 만드는 가장 쉬운 방법이다 :
const array_name = [item1, item2, ...];
※ const 키워드로 배열을 선언하는 것이 일반적이다. 아래 JS Array const에서 더 자세히 알 수 있다. (참조 : https://www.w3schools.com/js/js_array_const.asp)
공백과 줄 바꿈은 중요하지 않다. 선언은 여러줄에 걸쳐 있을 수 있다.
배열을 만든 다음 요소를 제공할 수도 있다.(초기화 가능)
다음 예제에서는 Array를 만들고 값을 할당한다 :
위 두 예제는 동일하다.
new Array()
를 사용할 필요가 없다. 단순함과 가독성 및 실행속도의 유리함을 위해 배열 리터럴 방법을 사용하자.
인덱스 번호를 참조하여 배열 요소에 접근한다 :
참고 : 배열 인덱스는 0부터 시작한다.
아래 예제는 car[]
의 첫 번째 요소 값을 변경한다.
JS를 사용하면 배열 이름을 참조하여 전체 배열에 접근 할 수 있다 :
배열은 특별한 유형의 객체이다. JS의 typeof
연산자는 배열에 대해 object
를 반환한다.
그러나 JS배열은 배열로 가장 잘 설명된다.
배열은 elements
에 접근하기 위해 숫자를 사용한다.
즉 아래와 같이 person[0]
은 John
을 반환한다 :
개체는 이름을(속성,키) 사용하여 members
에 접근하려한다. 아래 예제에서 person.firstName
은 John
을 반환한다 :
JS변수는 객체가 될 수 있다. 배열은 특별한 종류의 객체다.
※이 때문에 동일한 배열에 다른 유형의 변수를 가질 수 있다.
myArray[0] = Date.now;
myArray[1] = myFunction;
myArray[2] = myCars;
JS배열의 진정한 강점은 내장 배열 속성과 메서드이다 :
Array 메서드에 대한 자세한 내용은 다음장에서 다룬다.
(참조 : https://www.w3schools.com/js/js_array_methods.asp)
배열의 length
속성은 배열(배열 요소의 수)의 길이를 반환한다.
length
속성은 항상 가장 높은 배열 인덱스 보다 하나 더 크다.
배열을 반복하는 한 가지 방법은 for
루프를 사용하는 것이다.
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Arrays</h2>
<p>The best way to loop through an array is using a standard for loop:</p>
<p id="demo"></p>
<script>
const fruits = ["Banana", "Orange", "Apple", "Mango"];
let fLen = fruits.length;
let text = "<ul>";
for (let i = 0; i < fLen; i++) {
text += "<li>" + fruits[i] + "</li>";
}
text += "</ul>";
document.getElementById("demo").innerHTML = text;
</script>
</body>
</html>
Array.forEach()
함수를 사용할 수도 있다 :
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Arrays</h2>
<p>Array.forEach() calls a function for each array element.</p>
<p id="demo"></p>
<script>
const fruits = ["Banana", "Orange", "Apple", "Mango"];
let text = "<ul>";
fruits.forEach(myFunction);
text += "</ul>";
document.getElementById("demo").innerHTML = text;
function myFunction(value) {
text += "<li>" + value + "</li>";
}
</script>
</body>
</html>
배열에 새 요소를 추가하는 가장 쉬운 방법은 push()
메서드를 사용하는 것이다 :
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Arrays</h2>
<p>The push method appends a new element to an array.</p>
<button onclick="myFunction()">Try it</button>
<p id="demo"></p>
<script>
const fruits = ["Banana", "Orange", "Apple"];
document.getElementById("demo").innerHTML = fruits;
function myFunction() {
fruits.push("Lemon");
document.getElementById("demo").innerHTML = fruits;
}
</script>
</body>
</html>
button
을 누를 때마다, Lemon
이 추가된다.length
속성을 사용하여 배열에 새 요소를 추가할 수도 있다 : <!DOCTYPE html>
<html>
<body>
<h2>JavaScript Arrays</h2>
<p>The length property provides an easy way to append new elements to an array without using the push() method.</p>
<button onclick="myFunction()">Try it</button>
<p id="demo"></p>
<script>
const fruits = ["Banana", "Orange", "Apple"];
document.getElementById("demo").innerHTML = fruits;
function myFunction() {
fruits[fruits.length] = "Lemon";
document.getElementById("demo").innerHTML = fruits;
}
</script>
</body>
</html>
button
을 누를 때마다, Lemon
이 추가된다.※ 인덱스가 높은 요소를 추가하면 배열에 정의되지 않은 구멍이(hole) 생길 수 있다.
많은 프로그래밍 언어는 명명된 인덱스가 있는 배열을 지원한다. 명명된 인덱스가 있는 배열을 연관배열(associative arrays 또는 해시,hashes)라고 한다.
JS에서 배열은 항상 번호가 매겨진 인덱스를 사용한다.
※ 명명된 인덱스를 사용하는 경우 JS는 배열을 객체로 재정의 한다.
그 후 일부 배열 메서드 및 속성은 잘못된 결과를 생성한다.
JS에서 배열은 번호가 매겨진 인덱스를 사용한다.
JS에서 객체는 명명된 인덱스를 사용한다.
배열은 번호가 매겨진 인덱스가 있는 특수한 종류의 객체이다.
JS에서는 배열 생성자 new Array()
가 내장되어 있다.
그러나 대신 [ ]
를 안전하게 사용할 수 있다.
아래 두 개의 다른 문은 모두 point라는 이름의 빈 배열을 새로 만든다 :
아래 두 개의 다른 명령문은 모두 6개의 숫자를 포함하는 새 배열을 만든다 :
new
키워드는 예상치 못한 결과를 초래할 수 있다 :
아래 결과를 보면 알 수 있듯이, 배열 수가 1개인 Array를 new
를 사용하여 선언하였을 때, 이상한 값이 출력되었다.
흔한 실수 : 아래 두 선언문은 동일하지 않다.
cosnt points = [40]
const points = new Array[40]
일반적인 질문은 다음과 같다, 변수가 배열인지 어떻게 알 수 있을까?
문제는 JS연산자 typeof
가 object
를 반환한다는 것이다.
JS 배열이 객체이기 때문에 typeof
는 object
를 반환한다.
이 문제를 해결하기 위해 ECMAScript5(JS 2009)는 새 메서드 Array.isArray()
를 정의하였다.
instanceof
연산자는 객체가 주어진 생성자에 의해 생성된 경우 true
를 반환한다.
전체 Array에 대해 참고 하려면 아래 주소를 참조하자
(참조 : https://www.w3schools.com/jsref/jsref_obj_array.asp)