~~): tilde를 2번 반복해주는 것
let k = 8 return ~k // -9 return ~~k // 8~은 보수가 아닌 not이기 때문이다.따라서 ~~k는 8이다
Math.floor() 대신 사용될 수 있다.숫자에 ~연산을 하게되면서 소수점들은 버려지게된다.
즉, ~~를 활용하면 Math.floor() 처럼 활용할 수 있다.
장점
속도 측면에서 ~~가 빠르다.
The Mysterious Double Tilde (~~) Operation
위 블로그에 보면 크롬, Safari, iPhone XS에서 각각 Math.floor, ~~, parseInt 의 속도를 비교한 결과가 있다.
결과는 ~~ > Math.floor > parseInt 순으로 ~~가 가장 빠른 퍼포먼스를 보여줬다.
단점
복잡한 코드 또는 협업하는 과정에서는 가독성이 좋지 않기 때문에 사용하지 않는편이 좋을 것 같다.
undefined+3 => NaN 이런 상황에서 사용이 가능하다
EX)
Q. 배열[1,1,1,2,2,3,3,3,3]을 각 숫자가 몇개인지 객체에 저장해보자.
const arr = [1,1,1,2,2,3,3,3,3]
const obj1 = {}
arr.forEach(v=>{
if(obj1[v]) obj1[v]+=1
else obj1[v]=1
})
//obj1 {1: 3, 2: 2, 3: 4}
위와같이 obj에 key값이 있는지 확인해주는 작업이 필요하다. 그렇지 않으면 NaN이 나올 것이다.
그럼 ~~를 활용해 다시 코드를 작성해보자.
const obj2 = {}
arr.forEach(v=>obj2[v]= ~~obj2[v]+1)
//obj2 {1: 3, 2: 2, 3: 4}
undefined가 나올 수 있는 상황을 ~~연산자를 이용해서 간단하게 해결할 수 있다. 알고리즘 답안을 보면서 배운 연산자인 만큼 알고리즘에서 유용하게 사용할 수 있을 것 같다.