~
는 인자를 +1 시켜서 마이너스를 붙여준다.> ~3
-4
> ~100
-101
-~
연산은 +1과 같은 연산을 한다.-~a
와 a + 1
은 같은 연산이다.> ~undefined
-1
> ~false
-1
> ~0
-1
> ~null
-1
이 특성을 살려 아래와 같이 오브젝트에 할당할 때 undefined 경우를 굳이 분기처리하지 않아도 되게 만들어 준다.
stringOccurance1과 stringOccurance2는 같은 결과를 만드는 함수이다.
let a = "hello";
function stringOccurance1(s) {
let hash = {}
for (c in a) {
hash[c] = -~hash[c]
}
console.log('function1', hash);
}
stringOccurance2(a);
function stringOccurance2(s) {
let hash = {}
for (c in a) {
if (hash[c] == undefined) {
hash[c] = 1
} else {
hash[c]++
}
}
console.log('function2',hash);
}
stringOccurance2(a)