全局范围内的console.log(!status)产生意外结果

Fro*_*der 22 javascript console.log

进入一个有趣的问题.我正在努力尝试切换分配给变量的布尔值.它没有用,最终我尝试了这段代码.

var status = false;
console.log(!status);
Run Code Online (Sandbox Code Playgroud)

我希望它能true在控制台中提供,但我得到了false.我认为javascript会首先在括号内运行代码以找到它的值,然后在console.log中运行该值.你能解释一下为什么我没有true在控制台中获得价值吗?

Pau*_*aul 26

window.status已经存在(它用于获取/设置浏览器状态栏的文本),当为其分配值时,它将转换为字符串.如果你这样做,console.log( status );你会看到它status有字符串值"false",这会导致你看到输出false,因为你实际上拥有!"false"并且"false"是JavaScript中的真值.

如果你在函数中做同样的事情,你将获得预期的输出:

(function ( ) {
  var status = false;
  console.log(!status); // true
})();
Run Code Online (Sandbox Code Playgroud)