There's quite a few JavaScript idioms that coerce between types and similar things.
!
can convert anything falsey to boolean true
, !!
can convert anything falsey to actual boolean false
, +
can convert true
, false
, or a string representing a number into an actual number, etc.
Is there something similar that converts undefined
to null
?
Now I'm using ternary ? :
but it would be cool to know if I'm missing a useful trick.
OK, let me contrive an example ...
function callback(value) { return value ? format(value) : null; }
callback
is called by 3rd party code which sometimes passes undefined
.
The 3rd party code can handle null
being passed back, but not undefined
. format()
is also 3rd party and can't handle being passed either undefined
or null
.
It means null is equal to undefined but not identical. When we define a variable to undefined then we are trying to convey that the variable does not exist . When we define a variable to null then we are trying to convey that the variable is empty.
The typeof operator for undefined value returns undefined . Hence, you can check the undefined value using typeof operator. Also, null values are checked using the === operator. Note: We cannot use the typeof operator for null as it returns object .
In JavaScript, null is a special value that represents an empty or unknown value. For example, let number = null; The code above suggests that the number variable is empty at the moment and may have a value later.
null and undefined both return false . That's why your code is actually checking if false is equal to false . However their types are not equal. Because of that, the next statement will return false, as the === comparison operator checks both the types and their value.
undefined || null
- or any falsey || null - will return null
Javascript now supports a null-coalescing operator: ??
. It may not be production-ready (consult the support table), but it's certainly safe to use with Node or a transpiler (TypeScript, Babel, etc.).
Per MDN,
The nullish coalescing operator (??) is a logical operator that returns its right-hand side operand when its left-hand side operand is null or undefined, and otherwise returns its left-hand side operand.
Much as ||
can provide a "default" value when the left operand is falsey, ??
provides a "default" value if the left operand is null or undefined. You can use this to coerce undefined to null:
// OR operator can coerce 'defined' values "value" || null; // "value" 0 || null; // null false || null; // null "" || null; // null undefined || null; // null // The null-coalescing operator will only coerce undefined or null "value" ?? null; // "value" 0 ?? null; // 0 false ?? null; // false "" ?? null; // "" undefined ?? null; // null
An example based on the question:
function mustNotReturnUndefined(mightBeUndefined) { // can return null // Substitute empty string for null or undefined let result = processValue(mightBeUndefined ?? ""); // Substitute null for undefined return result ?? null; }
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