I know very well that null and undefined are distinct in JavaScript. However, I can’t seem to decide whether or not use that fact when my own functions are passed one of those as its argument.
Or, expressed in a different way, should myFoo(undefined) return the same thing as myFoo(null)?
Or, in yet another case, since myBar(1, 2, 3) is (almost) the same thing as myBar(1, 2, 3, undefined, undefined), should myBar(1, 2, 3, null, null) return the same thing as myBar(1, 2, 3)?
I feel that there’s potential for confusion in both cases and that a library should probably follow a convention when handling null/undefined.
I’m not really asking for personal opinions (so please express those as comments rather than answers). I’m asking if anyone knows if there is a best practice that one should stick to when it comes to handling this distinction. References to external sources are very welcome!
I’d say that while, most of the time, there is little value in distinguishing between the two, the cases where there is value tend to be quite interesting.
Take, for example, a function which can be given a callback.
undefinedmight indicate that some default callback should be used (as if the parameter weren’t specified), butnullcould indicate that no callback should be made at all:Of course,
falseor0could be used instead ofnullhere, but that might not be the case in a more complex example. And whether your code benefits from the additional parameter complexity is entirely up to you. 🙂