[JavaScript/TypeScript] -0과 0의 차이와 처리 방법
📌 -0과 0의 차이점
JavaScript와 TypeScript에서는 -0과 0이 다르게 인식될 수 있습니다.
🚀 -0이 발생하는 경우
console.log(1 / Infinity); // 0
console.log(1 / -Infinity); // -0
console.log(-0 === 0); // true
✅ -0과 0은 === 비교에서는 동일하지만, 내부적으로 다르게 저장됩니다.
📌 Object.is()를 사용하면 구분 가능
console.log(Object.is(-0, 0)); // false (-0과 0은 다름)
console.log(Object.is(-0, -0)); // true
✅ Object.is()를 사용하면 -0과 0을 구별할 수 있습니다.
📌 -0을 0으로 변환하는 방법
1️⃣ 삼항 연산자 사용 (val === 0 ? 0 : val)
const normalizeZero = (val: number) => (val === 0 ? 0 : val);
console.log(normalizeZero(-0)); // 0
✅ -0을 0으로 변환하는 가장 간단한 방법입니다.
2️⃣ Math.abs() 활용
console.log(Math.abs(-0)); // 0
console.log(Math.abs(0)); // 0
✅ Math.abs()를 사용하면 자동으로 -0이 0으로 변환됩니다.
3️⃣ Object.is()를 활용한 정확한 변환
const fixNegativeZero = (val: number) => (Object.is(val, -0) ? 0 : val);
console.log(fixNegativeZero(-0)); // 0
console.log(fixNegativeZero(5)); // 5
✅ Object.is()를 사용하면 -0만 정확히 감지하여 변환할 수 있습니다.
📌 -0을 고려해야 하는 경우
- 배열에서 -0 제거
const arr = [0, -0, 1, 2];
const normalizedArr = arr.map(fixNegativeZero);
console.log(normalizedArr); // [0, 0, 1, 2]
✅ map()을 사용하여 -0을 0으로 변환할 수 있습니다.
- JSON 변환 시 -0 유지 문제
console.log(JSON.stringify([-0, 0])); // "[0,0]" (-0이 자동으로 0으로 변환됨)
✅ JSON.stringify()는 -0을 0으로 자동 변환합니다.
📌 결론
- -0과 0은 === 비교에서는 같지만, Object.is()로 구별할 수 있음.
- Math.abs(), Object.is(), 삼항 연산자를 사용하여 -0을 0으로 변환 가능.
- JSON.stringify()는 -0을 자동으로 0으로 변환함.
✅ 이제 -0을 다루는 법을 확실히 이해했나요? 🚀
'programing > TypeScript' 카테고리의 다른 글
[TypeScript] Map 사용법 정리 - 키-값 기반 데이터 관리 (0) | 2025.03.11 |
---|---|
[TypeScript] Set 사용법 정리 - 중복 없는 데이터 관리 (0) | 2025.03.11 |