In what order will the numbers 1-4 be logged to the console when the code below is executed? Why?
(function() {
console.log(1);
setTimeout(function(){console.log(2)}, 1000);
setTimeout(function(){console.log(3)}, 0);
console.log(4);
})();
The values will be logged in the following order:
1
4
3
2
Let’s first explain the parts of this that are presumably more obvious:
1
and 4
are displayed first since they are logged by simple calls to console.log()
without any delay 2
is displayed after 3
because 2
is being logged after a delay of 1000 msecs (i.e., 1 second) whereas 3
is being logged after a delay of 0 msecs.
What will be the output when the following code is executed?
console.log(false == '0')
console.log(false === '0')
The code will output:
true
false
In JavaScript, there are two sets of equality operators. The triple-equal operator ===
behaves like any traditional equality operator would: evaluates to true if the two expressions on either of its sides have the same type and the same value. The double-equal operator, however, tries to coerce the values before comparing them. It is therefore generally good practice to use the ===
rather than ==
. The same holds true for !==
vs !=
.
What will be the output of this code?
var x = 21;
var number = function () {
console.log(x);
var x = 20;
};
number();
The code will output: undefined
It’s because JavaScript initialization is not hoisted. (Why doesn’t it show the global value of 21? The reason is that when the function is executed, it checks that there’s a local x variable present but doesn’t yet declare it, so it won’t look for global one.)