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

浪尽此生 提交于 2019-12-18 12:49:15

问题


Ran into an interesting issue. I was working on trying to toggle a boolean that was assigned to a variable. It wasn't working and eventually I tried this code.

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

I expected it to provide true in the console, but instead I got false. I figured that javascript would run the code inside the parenthesis first to find it's value and then console.log the value. Could you please explain why I am not getting a true value in the console?


回答1:


window.status already exists (it is used to get/set the text of the browser's status bar) and when a value is assigned to it, it is converted to a string. If you do console.log( status ); you will see that status has the string value "false", which causes you to see the output false, since you effectively have !"false" and "false" is a truthy value in JavaScript.

If you do the same thing inside a function you'll get the expected output:

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



回答2:


MDN

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

window.status exists already. so you can't use status variable .




回答3:


See the below screenshot which says that status is a property in window. So this directly refers to the window.status. It is not advisable to reuse certain variables and properties that are having default meaning(reminding about keywords in oops languages)




回答4:


Check the type for status like this:

typeof status

The output will be: "string".

Note that false and "false" are not same.

When you define:

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

That's why you are not getting true.




回答5:


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

This will give you expected output.

"status" is a predefined name of implementation-dependent JavaScript objects, methods, or properties. It is better avoid the identifiers as names of JavaScript variables. If you are using it outside the function then it means you want to implement any other thing by status value.



来源:https://stackoverflow.com/questions/40880958/console-logstatus-in-global-scope-producing-unexpected-result

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!