지속적으로 업데이트 될 예정입니다.
나중에 제가 보고 기억을 더듬거려 그때 공부했던 내용을 떠올릴수 있도록 간략하게 정리한 자료들입니다.
배열 확인은 Array.isArray() 사용하자
- arr.length 같은걸로 확인하면 '객체 또한 유사배열' 이기 때문에 프로그래밍적 에러가 날 수 있다. 예를들면,
아래 코드와 같은 참사가 일어날 수 있다.
// 유사 배열 객체 예시
const arrayLike = {
0: 'first',
1: 'second',
2: 'third',
length: 3
};
// 잘못된 배열 체크 방식
function incorrectArrayCheck(arr) {
// length 속성으로 배열 확인 - 이는 위험!
if (arr.length > 0) {
console.log('배열로 판단하고 배열 메서드 실행');
// 아래 코드는 유사 배열 객체에서 에러 발생!
return arr.map(item => item.toUpperCase());
}
return [];
}
유사 배열 객체
arguments : 함수에 전달된 모든 인자들을 포함한다.
- for문으로는 돌릴 수 있으나, 배열이 아니라서 map,filter 함수를 사용할 수 없다.
- _proto_ 가 Object임
- 최근에는 ...rest 사용을 권장한다.
// arguments를 사용
function sum() {
console.log(arguments); // 유사 배열 객체
console.log(Array.isArray(arguments)); // false
// 전달된 모든 인자들의 합계 계산
let total = 0;
for(let i = 0; i < arguments.length; i++) {
total += arguments[i];
}
return total;
}
console.log(sum(1, 2, 3, 4, 5)); // 15
// ...rest를 사용
function sum(...args) {
// args는 진짜 배열
return args.reduce((total, num) => total + num, 0);
}
불변성 (immutable)
자바스크립트는 원문배열을 그냥 다른 변수에 대입할 경우 메모리가 참조되기 때문에 원문 배열이 바뀌면 다른 변수에 대입한 값도 같이 바뀌게 된다. 그렇기 때문에 불변성을 지키려면 다음과 같은 방법을 써야한다.
다음과 같은 방법을 쓰면 참조값이 바뀌어 완전히 새로운 배열이 생성되기 때문에 처음 복사한 원문 배열의 영향을 안받는다.
- 배열을 복사한다. ( 스프레드 연산자 )
- 새로운 배열을 반환하는 메서드들을 활용한다. (map,filter,slice,concat,flat,flatMap 기타 등등..)
Array.prototype.every()
'&&' And 연산자와 비슷하다.
모두가 참이여야 되는...
Array.prototype.some()
'or' 연산자와 비슷하다.
'개인 공부 > 자바스크립트' 카테고리의 다른 글
객체 다루기 (2) | 2024.11.15 |
---|---|
map과 forEach차이 (1) | 2024.10.07 |