>웹 프론트엔드 >JS 튜토리얼 >JavaScript가 `===` 비교에서는 0과 -0을 동일하게 처리하지만 `Object.is`에서는 처리하지 않는 이유는 무엇입니까?

JavaScript가 `===` 비교에서는 0과 -0을 동일하게 처리하지만 `Object.is`에서는 처리하지 않는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-20 18:02:16907검색

Why Does JavaScript Treat  0 and -0 as Equal in `===` Comparisons but Not with `Object.is`?

JavaScript에서 0과 -0 구별

ECMAScript 5.1 사양에서는 숫자로 0과 -0을 구별하지만 왜 비교 0 === -0은 JavaScript에서 true로 평가됩니다.

IEEE 754 표준 및 부호 있는 0

JavaScript는 숫자 표현에 IEEE 754 표준을 사용합니다. 두 개의 0이 존재합니다: 0(양의 0)과 -0(음의 0). IEEE 754에서 0은 일반적으로 0으로 인코딩되지만 0과 -0 모두 유효한 표현입니다.

엄격한 평등 비교 알고리즘

ECMA의 섹션 11.9.6 -262 사양은 엄격한 평등 비교 알고리즘을 정의합니다. 수치 비교의 경우 엄격한 동등 비교에서 0과 -0이 동일하게 취급됨을 명시적으로 명시합니다.

x가 0이고 y가 -0이면 true를 반환합니다.
x가 -0이고 y가 0이면 true를 반환합니다.

따라서 0과 -0은 수치적으로 구별될 수 있지만 편의상 및 논리적 이유로 엄격한 동등 비교에서는 동일한 것으로 간주됩니다.

Object.is 비교

ES2015에서는 보다 정확한 비교를 위해 Object.is 메서드를 도입했습니다. Object.is는 -0과 0을 명시적으로 구별하며 비교할 때 false를 반환합니다.

Object.is(-0, 0); // false

결론적으로 JavaScript는 IEEE 754 표준을 사용하며 코딩 규칙을 단순화하기 위해 엄격한 동등 비교에서 0과 -0을 동일하게 취급합니다. 그러나 필요한 경우 Object.is 방법을 사용하면 더 미묘한 비교가 가능합니다.

위 내용은 JavaScript가 `===` 비교에서는 0과 -0을 동일하게 처리하지만 `Object.is`에서는 처리하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.