There's another set of operators that all return a Boolean value as a result of the operation. These are the comparison operators. The following table lists them together with example uses:
Note that NaN is not equal to anything, not even itself:
> NaN == NaN;
false
Undefined and null
If you try to use a non-existing variable, you'll get an error:
> foo;
ReferenceError: foo is not defined
Using the typeof operator on a non-existing variable is not an error. You get the string "undefined" back:
> typeof foo;
"undefined"
If you declare a variable without giving it a value, this is, of course, not an error. But, the typeof still returns "undefined":
> var somevar;
> somevar;
> typeof somevar;
"undefined"
This is because when you declare a variable without initializing it, JavaScript automatically initializes it with the value undefined:
> var somevar;
> somevar === undefined;
true
The null value, on the other hand, is not assigned by JavaScript behind the scenes; it's assigned by your code:
Although the difference between null and undefined is small, it could be critical at times. For example, if you attempt an arithmetic operation, you get different results:
> var i = 1 + undefined;
> i;
NaN
> var i = 1 + null;
> i;
1
This is because of the different ways null and undefined are converted to the other primitive types. The following examples show the possible conversions: