array

##배열은 모든유형의 요소를 저장할수 있다.

```javascript:qiita.rb
//배열은 모든유형의 요소를 저장할수 있다.
let arr = ['Apple', {name:"John"}, true, function(){alert("Hello")}];
alert(arr[1].name); //Jhon
arr[3](); // Hello
```

##pop 배열의 마지막 요소를 추출하여 반환한다.

```javascript:qiita.rb
// pop 배열의 마지막 요소를 추출하여 반환한다.
let fruits = ["Apple", "Orange", "Pear"]
fruits.pop(); // 배열의 마지막요소를 추출하여 반환하고 경고창을 보여줌
alert(fruits); // "Apple", "Orange"
```

##push 요소를 배열의 맨 마지막에 추가합니다.

```javascript:qiita.rb
// push 요소를 배열의 맨 마지막에 추가합니다.
let fruits = ["Apple", "Orange"];
fruits.push("Pear"); 
alert(fruits); //"Apple", "Orange", "Pear"
```

##shift 배열의 첫번째 요소를 추출하고 나머지 요소를반환합니다.
```javascript:qiita.rb
// shift 배열의 첫번째 요소를 추출하고 나머지 요소를반환합니다.
let fruits = ["Apple", "Orange"];
fruits.shift(); 
alert(fruit); //Apple
```
##unshift 요소를 배열의 시작부분에 시작한다.

```javascript:qiita.rb
// unshift 요소를 배열의 시작부분에 시작한다.
let fruits = ["Orange", "Pear"];
fruits.push("Orange", "Peach");
fruits.unshift("Pineapple", "Lemon");

alert(fruits); //"Pineapple", "Lemon", "Orange", "Pear""Orange", "Peach"
```
##배열은 객체이므로 객체처럼 작동합니다.
```javascript:qiita.rb
// 배열은 객체이므로 객체처럼 작동합니다.
// 배열은 특별한 종류의 객체입니다. 속성에 액세스하는 데 사용되는 대괄호는 arr[0]실제로 객체 구문에서옵니다. 숫자가 키로 사용됩니다.
let fruits = ["Banana"]
let arr = fruits;
alert(arr === fruits); //true
arr.push("Pear");
alert(fruits);//"Banana","Pear"
```

##배열은 객체 기반이기 때문에 가능합니다. 우리는 그들에게 어떤 속성을 추가 할 수 있습니다.
```javascript:qiita.rb
// 배열은 객체 기반이기 때문에 가능합니다. 우리는 그들에게 어떤 속성을 추가 할 수 있습니다.
let fruits = [];
fruits[99999] = 5;
fruits.age = 25
```

##Loop
```javascript:qiita.rb
let arr = ["Apple", "Orange", "Pear"]
for (let index = 0; index < arr.length; index++) {
    alert(arr[index]);
}


let fruits = ["Apple", "Orange", "Pear"]
for( let fruit of frutis) {
    alert(fruit);
}

// 잠재적 인 문제가 있습니다. 기술적으로 가능하지만 최대한 사용금지 
let arr = ["Apple", "Orange", "Pear"]
for (let key in arr) {
    alert(arr[key])
}
```
##array
```javascript:qiita.rb
let fruits = [];
fruits[123] = "Apple";
alert(fruits.length); //124


// length 속성은 쓰기가 가능하다는것을 잊지말자
// 수동으로 늘리면 재미있는 일은 없습니다. 
// 그러나 우리가 그것을 감소 ​​시키면, 배열은 잘립니다. 
// 프로세스는 되돌릴 수 없습니다. 예를 들면 다음과 같습니다.
let arr = [1,2,3,4,5];
arr.length =2;
alret(arr);// [1,2]
arr.length = 5;
alert(arr[3]); // undefined
```
##new Array 
```javascript:qiita.rb
//new Array 
//대괄호 []가 짧기 때문에 거의 사용하지 않습니다 . 또한 거기에는 까다로운 기능이 있습니다.
//new Array인수가 숫자 인 단일 인수로 호출 되면 항목없이 길이가 지정된 배열 을 만듭니다 .

let arr = new Array(2);
alert(arrp[0]); //undefined
alert(arr.length); // 2

// 다차원배열
let matrix = [
    [1,2,3],
    [4,5,6],
    [7,8,9]
];
alert(matrix[1][1]); //5

let arr = [1,2,3];
alert(arr);
alert(String(arr) == '1,2,3'); //true
```

Array는 정렬 된 데이터 항목을 저장하고 관리하는 데 적합한 특수한 객체입니다.

선언문 :

```javascript:qiita.rb
// square brackets (usual)
let arr = [item1, item2...];

// new Array (exceptionally rare)
let arr = new Array(item1, item2...);

```
호출 new Array(number)은 주어진 길이를 갖지만 요소가없는 배열 을 생성합니다.

이 length속성은 배열 길이 또는 정확하게 말하면 마지막 숫자 인덱스에 1을 더한 값입니다. 배열 방법에 의해 자동 조정됩니다.

length수동으로 단축 하면 배열이 잘립니다.

다음 연산을 사용하여 배열을 양단 큐로 사용할 수 있습니다.

- push(...items)items결국 추가 됩니다.
- pop() 요소를 끝에서 제거하고 반환합니다.
- shift() 요소를 처음부터 제거하고 반환합니다.
- unshift(...items) 처음에 항목을 추가합니다.
- 배열 요소를 반복하려면 :
 - for (let i=0; i<arr.length; i++) - 가장 빠르고 오래된 브라우저와 호환됩니다.
 - for (let item of arr) - 항목에 대한 최신 구문 만,
 - for (let i in arr) - 절대로 사용하지 마십시오.