Problem

자바스크립트를 사용하다보면 ~~ 를 이용해 구현된 코드를 가끔 접하게 되는데, 처음 접하는 경우 어떤 의미인지 알기 어려울 수 있는데, 간단하게 정리해보고자 한다.

Solution

~~ 는 이중 NOT 의 비트 연산자 이다1. 양수에 대해서는 Math.floor()과 같고 음수에 대해서는 Math.ceil()과 같은 결과를 나타낸다. (아래 예제 참조). Math.floor가 일부 브라우저에서 더 좋은 성능을 보여주고 있기 때문에(일부에서 느린 경우도 있다) 문맥의 이해가 어려운 ~~ 보다 Math 함수를 사용하는 것이 좋은 경우도 있다. (성능 차이는 아주 적으므로 이해하기 쉬운 코드로 작성하는 것이 더 좋다.)

function(x) {
    if(x < 0) return Math.ceil(x);
    else return Math.floor(x);
}

사용 예제

~~(-5.7) // -5
~~(5.7)  // 5

prefix += ~~(Math.random() * 1000000)
this.value = ~~this.value; // cast to ints.

References