在《javascript高级程序设计》中的第三章中分别讲到:数值转换 与 逻辑非。
书中是这样讲的:
- 如果操作数是一个对象,返回 false;
- 如果操作数是一个空字符串,返回true;
- 如果操作数是一个非空字符串,返回false;
- 如果操作数是数值0,返回true;
- 如果操作数是任意非0数值,返回false;
- 如果操作数是null,返回true;
- 如果操作数是NaN,返回true;
- 如果操作数是undefined,返回true;
逻辑非操作符也可以用于将一个值转换为与其对应的布尔值,而同时使用两个逻辑非操作符,实际上就会模拟Boolean()转型函数的行为,其中,第一个逻辑非操作会基于无论什么操作数返回一个布尔值,而第二个逻辑非操作则对该布尔值求反,于是就得到了这个值真正对应的布尔值。在《javascript高级程序设计》一书中,举出了一个例子:
alert(!!"blue"); 返回值:true
alert(!!0); 返回值:false
alert(!!NaN); 返回值:false
alert(!!""); 返回值:false
alert(!!12345); 返回值:true
我在如果同时使用三个逻辑非呢?,为了验证这个问题,我尝试了一下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script type="text/javascript">
document.write(!!!"blue");
document.write("<br>");
document.write(!!!0);
document.write("<br>");
document.write(!!!NaN);
document.write("<br>");
document.write(!!!"");
document.write("<br>");
document.write(!!!12345);
</script>
</body>
</html>
得出的结果刚好与上文相反: