最近发现别人的一段js中出现了两个感叹号,因此专门了解了一下两个感叹号的作用。
请看下面这段代码:

    var t1 = false;
    var t2 = 0;
    var t3 = "";
    var t4 = null;
    var t5 = undefined
    var t6 = NaN
    console.log("!t1" + !t1);
    console.log("!t2" + !t2);
    console.log("!t3" + !t3);
    console.log("!t4" + !t4);
    console.log("!t5" + !t5);
    console.log("!t6" + !t6);
    console.log("!!t1" + !!t1);
    console.log("!!t2" + !!t2);
    console.log("!!t3" + !!t3);
    console.log("!!t4" + !!t4);
    console.log("!!t5" + !!t5);
    console.log("!!t6" + !!t6);

运行结果如下:
image.png

从结果可以看出,一个感叹号的作用就是取反,两个感叹号的作用就是取反之后再取反。这样写的好处是可以把其他类型强制转换为布尔类型,虽然js中可以自动把其他类型转换为布尔类型,但这只是在作为条件判断表达式时才有用,其他任何情况下,都可以使用两个感叹号强制返回布尔类型的值。

Q.E.D.


擅长前端的Java程序员