JavaScript의 마법 같은 ~~(이중 물결표) 연산자 탐색
JavaScript 모험의 영역에서 신비한 운영자. 언뜻 보면 신뢰할 수 있는 비트 NOT 연산자인 단일 물결표 ~와 유사합니다. 이것은 가 이중 NOT을 수행하고 단순히 동일한 값을 반환한다는 의미입니까? 더 깊이 파고들어 그 진정한 목적을 밝혀내겠습니다.
진실 밝히기
연산자의 비밀은 피연산자를 해석하는 방식에 있습니다. 단일 물결표와 달리 은 입력이 숫자나 문자열이더라도 부호 있는 32비트 정수로 변환합니다. 이 변환을 사용하면 소수점 이하의 모든 항목을 효과적으로 제거하는 비트 연산을 수행합니다.
즉, 이 연산자는 다음 함수처럼 동작합니다.
<code class="javascript">function(x) { if(x < 0) return Math.ceil(x); else return Math.floor(x); }</code>
그러나 올바르게 작동하는 경우에만 작동합니다. 오버플로를 방지하려면 -(231)과 231 - 1 사이의 값에 대해
왜 ~~가 NOT의 NOT이 아닌지
은 NOT 연산을 두 번 적용하는 것과 동일하지 않다는 점을 이해하는 것이 중요합니다. 첫 번째 NOT 연산은 비트를 반전시키는 반면, 두 번째 연산은 비트를 다시 반전시켜 원래 값이 됩니다. 대신 은 숫자의 소수 부분을 직접 자릅니다.
예를 들어 32비트 바이너리로 표현되는 숫자 -43.2는 다음과 같습니다.
<code class="binary">11111111111111111111111111010101</code>
~~을 적용한 후,
<code class="binary">11111111111111111111111111010101</code>
이것은 -43으로 다시 변환됩니다. 이는 ~~가 숫자의 소수 부분을 효과적으로 제거한다는 것을 보여줍니다.
주의 사항
~~은 문자열 인수를 숫자로 변환하는 데 유용할 수 있지만 오버플로 위험이 있습니다. 정수가 아닌 것에 대한 본질적인 부정확성은 위험한 선택이 됩니다. 대신 x 또는 Number(x)와 같은 보다 간단한 방법을 사용하는 것을 고려해 보십시오.
결론적으로 ~~는 숫자나 문자열에서 소수 값을 자르는 매력적인 연산자입니다. 고유한 동작과 제한 사항을 이해하면 JavaScript 모험에서 책임감 있게 그 기능을 활용할 수 있습니다.
위 내용은 ## JavaScript에서 ~~(이중 물결표) 연산자는 실제로 무엇을 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!