>웹 프론트엔드 >JS 튜토리얼 >왜 `0 === -0`은 JavaScript에서 True로 평가되지만 `Object.is(-0, 0)`는 False를 반환합니까?

왜 `0 === -0`은 JavaScript에서 True로 평가되지만 `Object.is(-0, 0)`는 False를 반환합니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-22 07:04:11511검색

Why Does ` 0 === -0` Evaluate to True in JavaScript, While `Object.is(-0,  0)` Returns False?

0과 -0의 차이와 동등

ECMAScript 5.1 사양은 0과 -0을 구별하여 왜 0인지 의문을 제기합니다. === -0은 true로 평가됩니다.

IEEE 754 표준

JavaScript는 숫자 표현에 IEEE 754 표준을 사용합니다. IEEE 754에 따르면 부호 있는 0은 양의 0(0)과 음의 0(-0)을 허용합니다. 이러한 구별은 1/-0 = - 및 1/ 0 = 0과 같이 부동 소수점 연산에 필요합니다.

엄격한 동등 비교 알고리즘

기술적 어려움에도 불구하고 구별, 사양의 섹션 11.9.6은 0과 에 대한 엄격한 동등 비교 알고리즘의 동작을 명시적으로 정의합니다. -0:

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

논리적, 실천적 근거

논리적으로는 0과 -0을 동일하게 취급하는 것이 합리적입니다. 둘을 구별하면 특히 0으로 작업할 때 코드가 복잡해집니다.

Object.is 비교 방법

ES2015에서는 보다 정확한 비교를 위해 Object.is를 도입했습니다. Object.is는 0과 -0을 명시적으로 구분합니다.

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

위 내용은 왜 `0 === -0`은 JavaScript에서 True로 평가되지만 `Object.is(-0, 0)`는 False를 반환합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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