为什么~null === -1?

Ran*_*lue 2 javascript

我在这个JavaScript测试中遇到的问题是~null评估为-1.

为什么~null评估-1

Ja͢*_*͢ck 10

那是因为它~是一个数字运算符,所以它首先转换null0:

> ~0
-1
Run Code Online (Sandbox Code Playgroud)

它等同于这个表达式:

~(+null)
Run Code Online (Sandbox Code Playgroud)

同样:

> ~[]
-1
> ~{}
-1
Run Code Online (Sandbox Code Playgroud)