undefined share abstract equality
== but not strict equality
null == undefined // true null === undefined // false
They represent slightly different things:
undefinedrepresents the absence of a value, such as before an identifier/Object property has been created or in the period between identifier/Function parameter creation and it's first set, if any.
nullrepresents the intentional absence of a value for an identifier or property which has already been created.
They are different types of syntax:
undefinedis a property of the global Object, usually immutable in the global scope. This means anywhere you can define an identifier other than in the global namespace could hide
undefinedfrom that scope (although things can still be
nullis a word literal, so it's meaning can never be changed and attempting to do so will throw an Error.
undefined are both falsy.
if (null) console.log("won't be logged"); if (undefined) console.log("won't be logged");
false (see this question).
false == undefined // false false == null // false false === undefined // false false === null // false
undefinedis shadowed by another value, it's just as bad as shadowing
undefined. If you want to remove a property bar from an Object
undefinedcould throw a Reference Error, use