JavaScript中的 !!(双感叹号)是什么意思?
大家好!我刚开始学习JavaScript,在别人的代码中遇到了一个奇怪的构造。代码大概是这样的:
```javascript
let isActive = !!someValue;
```
我知道一个感叹号 `!` 是逻辑“非”,它会反转值(把 `true` 变成 `false`,反之亦然)。但为什么要连续写两个感叹号呢?这难道不是和直接写 `!(!someValue)` 一样吗?还是说这是一个我不知道的特殊运算符?
我试着在浏览器控制台中玩了一下:
```javascript
console.log(!!"hello"); // true
console.log(!!0); // false
console.log(!!""); // false
console.log(!!null); // false
console.log(!!undefined); // false
console.log(!!42); // true
```
结果有点奇怪:`!!"hello"` 返回 `true`,虽然字符串不是空的。`!!0` 返回 `false`,尽管0是一个数字。也许这和类型转换有关?请解释一下,这个双感叹号到底有什么用?