배열은 객체인 지 확인하기
배열은 사실 객체라고 하는데, 확인해보기
//배열 선언 const arr = []; //객체 확인 console.log(typeof arr); |
object |
실제로 타입이 object인 것을 볼 수 있다.
객체처럼 다뤄보기1
const funcKey = function() {} class classKey{} //배열 객체처럼 다루기 블록 접근 arr['string'] = '리터럴'; arr[{}] = '객체'; arr[[]] = '배열'; arr[()=> 'a'] = '화살표함수'; arr[funcKey] = '함수'; arr[classKey] = '클래스'; console.log( Object.entries(arr) ); |
[ [ 'string', '리터럴' ], [ '[object Object]', '객체' ], [ '', '배열' ], [ "()=> 'a'", '화살표함수' ], [ 'function() {}', '함수' ], [ 'class classKey{}', '클래스' ] ] |
배열로 객체이므로, Object.entries() 메서드가 동작한다.
toString() 결과가 key가 되고 있다.
객체처럼 다뤄보기2
//배열 객체처럼 다뤄보기2, 점 접근 const arr2 = []; arr2.name = "홍길동"; arr2.age = 10; console.log(arr2); |
[ name: '홍길동', age: 10 ] |
객체처럼 다룬 배열을 배열처럼 사용해보기
console.log(arr.length); arr.pop(); arr.pop(); arr.unshift(); arr.unshift(); console.log(arr); |
0 [ string: '리터럴', '[object Object]': '객체', '': '배열', "()=> 'a'": '화살표함수', 'function() {}': '함수', 'class classKey{}': '클래스' ] |
기존 데이터가 배열로 인식을 안 해 length로 안 잡히고 있다.
arr[9] = 10; arr[5] = 6; console.log(arr.length); console.log(arr.toString()); console.log(arr.join(",")); |
10 ,,,,,6,,,,10 ,,,,,6,,,,10 |
객체라고 가정하고, key가 숫자인 경우만 인식하여 동작하고 있다.
응용해보기
배열이 객체 관련된 메서드가 적용되므로, 동일한 함수를 만들면 같이 사용이 가능할 것
//응용해보기 const obj = {}; obj['string'] = '리터럴'; obj[{}] = '객체'; obj[[]] = '배열'; obj[()=> 'a'] = '화살표함수'; obj[funcKey] = '함수'; obj[classKey] = '클래스'; console.log(obj); console.log("\n\n\n") //배열과 함수를 받아 순회하는 함수 function each(objOrArr){ const keys = Object.keys(objOrArr); keys.forEach(key => console.log(key, objOrArr[key])); } each(arr); each(obj); |
5 6 9 10 string 리터럴 [object Object] 객체 배열 ()=> 'a' 화살표함수 function() {} 함수 class classKey{} 클래스 string 리터럴 [object Object] 객체 배열 ()=> 'a' 화살표함수 function() {} 함수 class classKey{} 클래스 |
결론
배열은 객체처럼 다룰 수 있다.
객체처럼 쓰는 사람은 없겠지만...
확실하진 않지만, 객체는 요소에 접근할 때 아마도 해시를 사용할 것 같고,
배열은 말 그대로 배열로 만들어 인덱스로 접근하는 것 같다.
https://ko.javascript.info/array#ref-1135
https://www.udemy.com/course/clean-code-js/ - 배열 - 배열은 객체다.
'개발 > 자바스크립트' 카테고리의 다른 글
구조 분해 할당 (0) | 2023.08.21 |
---|---|
반올림 함수 (0) | 2023.04.10 |
평균 구하기 주의점 (0) | 2023.01.21 |
자바스크립트 중복제거 - 2 (0) | 2022.12.15 |
자바스크립트 중복 제거 (0) | 2022.12.12 |