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

console.log(!status) in global scope producing unexpected result

运行 变成一个有趣的问题。我正在尝试切换分配给变量的布尔值。它没有用,最终我尝试了这段代码。

var status = false;
console.log(!status);

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

MDN

var statu = false;
console.log(!statu);

window.status 已经存在。所以你不能使用状态变量。

window.status已经存在(它被用来get/set浏览器状态栏的文本)并且当给它赋值时,它被转换成一个字符串。如果您执行 console.log( status );,您将看到 status 具有字符串值 "false",这会导致您看到输出 false,因为您实际上拥有 !"false""false" 是 JavaScript 中的真值。

如果你在一个函数中做同样的事情,你会得到预期的输出:

(function ( ) {
  var status = false;
  console.log(!status); // true
})();
(function ( ) {
  var status = false;
  console.log(!status);
})();

这将为您提供预期的输出。

"status" 是 依赖于实现的 JavaScript 对象、方法或属性的预定义名称。最好避免将标识符作为 JavaScript 变量的名称。如果你在函数外使用它,那么这意味着你想通过状态值实现任何其他东西。

请参阅下面的屏幕截图,其中显示状态是 window 中的 属性。 所以这里直接引用了window.status。 不建议重复使用某些具有默认含义的变量和属性(提醒关于关键字糟糕的语言)

像这样检查 status 的类型:

typeof status

输出将是:"string"

注意 false"false" 不一样。

当你定义:

var status = false; //which is actually "false"

这就是为什么你没有得到 true