It is true. Math.min() returns positive Infinity when called with no arguments and Math.max() returns Negative Infinity when called with no arguments. Positive Infinity > Negative Infinity.
Math.min() works something like this
defmin(numbers):
r = Infinity
for n in numbers:
if n < r:
r = n
return r
I’m guessing there’s a reason they wanted min() to be able to be called without any arguments but I’m sure it isn’t a good one.
So, the language isn’t compiled (or wasn’t originally) so they couldn’t make min() be an error that only a developer saw, it has to be something that the runtime on the end-user system dealt with. So, it had to be assigned some value. Under those restrictions, it is the most mathematically sound value. It makes miniumum-exactly-2(x, min(<…>)) be exactly the same as min(x, <…>), even when the “<…>” has no values.
As a developer, I see a lot of value in static analysis, including refusing to generate output for sufficiently erroneous results of static analysis, so I don’t like using JS, and the language that I tinker with will definitely have a separate compilation step and reject the equivalent of min(). But, if I HAD to assign something like that a value, it probably would be a representation of infinity, if we had one (probably will due to IEEE floats).
The language not being compiled has nothing to do with error handling. You could have a min function that operates on dynamic arrays (e.g. std::min_element in C++ or min() in Python).
I’m guessing there’s a reason they wanted min() to be able to be called without any arguments but I’m sure it isn’t a good one.
It not a totally unreasonable definition. For example it preserves nice properties like min(a.concat(b)) == min([min(a), min(b)]).
Obviously the correct thing to do is to return an optional type, like Rust does. But … yeah I mean considering the other footguns in Javascript (e.g. the insane implicit type coersion) I’d say they didn’t do too badly here.
It is true. Math.min() returns positive Infinity when called with no arguments and Math.max() returns Negative Infinity when called with no arguments. Positive Infinity > Negative Infinity.
Math.min() works something like this
def min(numbers): r = Infinity for n in numbers: if n < r: r = n return r
I’m guessing there’s a reason they wanted min() to be able to be called without any arguments but I’m sure it isn’t a good one.
So, the language isn’t compiled (or wasn’t originally) so they couldn’t make
min()
be an error that only a developer saw, it has to be something that the runtime on the end-user system dealt with. So, it had to be assigned some value. Under those restrictions, it is the most mathematically sound value. It makes miniumum-exactly-2(x, min(<…>)) be exactly the same as min(x, <…>), even when the “<…>” has no values.As a developer, I see a lot of value in static analysis, including refusing to generate output for sufficiently erroneous results of static analysis, so I don’t like using JS, and the language that I tinker with will definitely have a separate compilation step and reject the equivalent of
min()
. But, if I HAD to assign something like that a value, it probably would be a representation of infinity, if we had one (probably will due to IEEE floats).HTH
The language not being compiled has nothing to do with error handling. You could have a
min
function that operates on dynamic arrays (e.g. std::min_element in C++ or min() in Python).It not a totally unreasonable definition. For example it preserves nice properties like
min(a.concat(b)) == min([min(a), min(b)])
.Obviously the correct thing to do is to return an optional type, like Rust does. But … yeah I mean considering the other footguns in Javascript (e.g. the insane implicit type coersion) I’d say they didn’t do too badly here.