Javascript 全局作用域中的console.log(!status)产生意外结果
遇到了一个有趣的问题。我正在尝试切换分配给变量的布尔值。它不起作用,最终我尝试了这个代码Javascript 全局作用域中的console.log(!status)产生意外结果,javascript,console.log,Javascript,Console.log,遇到了一个有趣的问题。我正在尝试切换分配给变量的布尔值。它不起作用,最终我尝试了这个代码 var status = false; console.log(!status); 我希望它在控制台中提供true,但是我得到了false。我认为javascript将首先在括号内运行代码以查找其值,然后在console.log中记录该值。您能解释一下为什么我在控制台中没有得到true值吗? var statu=false; 控制台日志(!statu)已存在(用于获取/设置浏览器状态栏的文本),当为其指定
var status = false;
console.log(!status);
我希望它在控制台中提供true
,但是我得到了false
。我认为javascript将首先在括号内运行代码以查找其值,然后在console.log中记录该值。您能解释一下为什么我在控制台中没有得到true
值吗?
var statu=false;
控制台日志(!statu)代码>已存在(用于获取/设置浏览器状态栏的文本),当为其指定值时,它将转换为字符串。如果您执行console.log(状态)
您将看到状态
具有字符串值“false”
,这会导致您看到输出false
,因为实际上您有!“false”
和“false”
是JavaScript中的真实值
如果在函数中执行相同的操作,您将获得预期的输出:
(function ( ) {
var status = false;
console.log(!status); // true
})();
这将为您提供预期的输出
“status”是依赖于实现的JavaScript对象、方法或属性的预定义名称。最好避免将标识符作为JavaScript变量的名称。如果您在函数之外使用它,则意味着您希望通过状态值实现任何其他功能。请参见下面的屏幕截图,其中说明状态是窗口中的属性。
所以这直接指的是window.status。
不建议重用某些具有默认含义的变量和属性(提醒oops语言中的关键字)
检查状态的类型,如下所示:
typeof status
输出将是:“字符串”
请注意,false
和“false”
是不同的
定义时:
var status = false; //which is actually "false"
这就是为什么你没有得到IE中有趣的true
的原因,我得到了true
但是在chrome和firefox中我得到了false是的,我得到了其他变量的true,但是当使用状态窗口时,状态已经存在。我的猜测是存在冲突。无论您为window.status指定了什么值,它都会转换为字符串,因此!状态
→ <代码>!“假”
→ 是的,但是为什么呢?解释你的答案我已经编辑了我的答案并解释了@StephanBijzitterNo,这不是一个保留字。如果是,你会得到一个语法错误。@Bergi仅供参考:请看。您可以看到保留字列表。@BharatJain是的。它不在保留字列表中。它位于“避免作为JavaScript变量名称的标识符”列表中。
var status = false; //which is actually "false"