What is the difference between if (!x)
and if (x == null)
; that is, when can their results be different?
!x
will return true
for every "falsy" value (empty string, 0
, null
, false
, undefined
, NaN
) whereas x == null
will only return true
if x
is null
(edit: or apparently undefined
(see below)).
Try with x = 0
, there is a difference.
You can say that the NOT operator !
converts a value into its opposite boolean equivalent. This is different than actually comparing two values.
In addition, if you compare values with ==
, JavaScript does type conversion which can lead to unexpected behavior (like undefined == null
). It is better to always use strict comparison ===
(value and type must be the same) and make use of type conversion only if you really know what you are doing.
Something to read:
Update:
For more information about the non-strict comparison of null
and undefined
(or the comparison in general), it is worth having a look at the specification. The comparison algorithm is defined there (the comparison is x == y
):
- If Type(x) is the same as Type(y), then
(...)- If x is null and y is undefined, return true.
- If x is undefined and y is null, return true.
- (...)
(...)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With