July 27th 2018
5. Array
배열은 Object와 동일하게 property를 가지며, 접근방법도 Object와 동일하게 접근할 수 있습니다. 하지만, 배열은 순차적으로 나열된 데이터를 순차적인 숫자로 된 key값으로 정렬해서 담기에 좋다고 생각합니다.
주로 배열의 장점을 살리기 위해 문자열로 된 key 값을 많이 사용하지는 않지만, object와 마찬가지로 숫자 index 대신 문자열로 된 key값을 사용할 수 있습니다.
Object와 마찬가지로 for in loop에서도 해당 키 값을 찾을 수 있습니다. 하지만, 배열의 속성인 length값에는 문자열로 된 key값은 카운트 되지 않습니다.
var arr = [];
arr['x'] = 7;
arr[0] = 'cat';
arr[1] = 'dog';
console.log(arr); // => ["cat", "dog", x: 7]
for (var k in arr) {
console.log(k); // => '0', '1', 'x'
}
console.log(arr.length); // => 2
console.log(arr['length']); // => 2
console.log(arr[0]); // => "dog"
console.log(arr[1]); // => "cat"
console.log(arr[2]); // => undefined
console.log(arr['x']); // => 7
위와 같이 문자열로 된 key값을 가진 배열의 요소는 index값으로는 접근할 수 없습니다.
배열 내 속성을 들여다 보면 length를 확인할 수 있지만, for in loop에서는 이 length 속성이 생략됩니다. Javascript 자체적으로 for-in loop 사용의 편의성을 높이기 위해 length 속성을 숨겼기 때문입니다. 이러한 property를 가리켜 열겨할수 없는(unenumerable) property라고 합니다.
마지막으로, array에서 각 요소에 접근하여 어떠한 작업을 하고 싶을 때, for loop with semicolon을 주로 사용합니다.
var arr = [];
arr['x'] = 7;
arr[0] = 'cat';
arr[1] = 'dog';
for (var i = 0; i < arr.length; i++) {
console.log(arr[i]); // => 'cat', 'dog'
}