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
})();