programing/TypeScript

[JavaScript/TypeScript] -0과 0의 차이와 처리 방법

쪽제비 2025. 3. 12. 08:44

[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을 다루는 법을 확실히 이해했나요? 🚀