进入一个有趣的问题。我正在努力尝试切换分配给变量的布尔值。它没有用,最终我尝试了这段代码。
var status = false;
console.log(!status);
我希望它在控制台中提供true
,但我得到false
。我认为javascript会首先在括号内运行代码以找到它的值,然后在console.log中运行该值。你能解释一下为什么我没有在控制台中获得true
值吗?
答案 0 :(得分:26)
window.status已经存在(用于获取/设置浏览器状态栏的文本),当为其分配值时,它将转换为字符串。如果您执行console.log( status );
,则会看到status
的字符串值为"false"
,这会导致您看到输出false
,因为您实际拥有!"false"
和"false"
是JavaScript中的真实价值。
如果你在一个函数中做同样的事情,你将获得预期的输出:
(function ( ) {
var status = false;
console.log(!status); // true
})();
答案 1 :(得分:4)
答案 2 :(得分:1)
答案 3 :(得分:1)
检查status
的类型如下:
typeof status
输出结果为:"string"
。
请注意,false
和"false"
不相同。
定义时:
var status = false; //which is actually "false"
这就是为什么你没有得到true
。
答案 4 :(得分:-2)
(function ( ) {
var status = false;
console.log(!status);
})();
这将为您提供预期的输出。
"的状态"是依赖于实现的JavaScript对象,方法或属性的预定义名称。最好将标识符作为JavaScript变量的名称来避免。如果您在函数外部使用它,则意味着您希望按状态值实现任何其他事物。