If you thought this was fun you might like https://jsisweird.com/ with similar questions
Programmer Humor
Welcome to Programmer Humor!
This is a place where you can post jokes, memes, humor, etc. related to programming!
For sharing awful code theres also Programming Horror.
Rules
- Keep content in english
- No advertisements
- Posts must be related to programming or programmer topics
It's C
No, it's Javascript, keep up
Javascript is basically just C with some syntactical sugar, right? RIGHT?!?
To the contrary, it's Lisp with a lot of syntactic sugar to make it look more like C, but underneath it's nothing like C. It's a weird hybrid.
Wtf? Min > Max???
Math.min isn’t the minimum integer; it’s the minimum of a list (and max visa versa)… the min/max of an undefined list is the same… IDK what it is, but this probably the most reasonable of the “WTFs” they could have put there i think… other languages would throw an exception or not compile (which JS definitely SHOULD do instead of this, buuuuut lots of JS has aversions to errors)
*edit: okay the curiosity was killing me: Math.min() is Infinity and Math.max() is -Infinity
That explains it then. It could be mislead for -inf and +inf
I love the two lonely downvotes on this.
Merging the upvotes and downvotes is the best option
nah, it's more fun this way.
I'm no expert and I know that javascript is full of wtf moments, but please.. Let it be B
It's not gong to be B, it's it.
Narrator: "It wasn't B."
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.
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.
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).
Not having a separate compilation step absolutely affects error handling. With a compilation step, you can have errors that will only be seen by and must be address by a developer prior to run time. Without one, the run time system, must assign some semantics to the source code, no matter how erroneous it is.
No matter what advisory "signature" you imagine for a function, JS has to assign some run time semantics to that function being called incorrectly. Compiled languages do not have to provide a run time semantics to for signatures that can be statically checked.
Math.min() == Infinity
Math.max() == -Infinity
Wtf is going on JS...
edit: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/min
Its the min value of the input params, or Infinity.
Math.min.length is 2, which weakly signals that it's designed to handle at least two parameters
Why would they even define this value?
Note: I’m not a js dev, do most functions have length?
I am also not a JS dev, we possibly aren't brain damaged enough to understand the perfection.
Most people don't use JS because they think it's perfect... they use it because it's the language that works on web browsers... or because thier coworkers made something in it... or because the library that does what they want uses it...
It's C, NaN is never equal to itself in floating point, that's not just a JS thing.
Yep, it's C
No, it's JS
I also am not familiar with javascript anymore....precisely because of this, exact, insane bullshit.
B... and/or C... evaluating as FALSE are the only things that... should even kind of make sense, according to my brain.
Though at this point in my life, I have unironically had a good number of concussions and contusions, so ... well you'd think that would help with JS development.
Javascript is insanity, and I am still convinced it is at least 40% responsible for Notch losing his goddamned mind.
'null' is somehow an object. because fuck you, thats why!
Is... 0 == '' ... is that two single quotes ' ' ?
Or one double quote " ?
If... it is one double quote... that wouldn't even evaluate, as it would just be an empty string without a defined end...
But if it was two single quotes... that would just be a proper empty string... and because of forced type coercion, both 0 and '' are FALSE when compared with ==, but not when compared with ===, because that ignores forced type coercion...
https://www.w3docs.com/snippets/javascript/when-to-use-double-or-single-quotes-in-javascript.html
Oh my fucking god WHY?!
Just fucking use one special character to delimit strings!
Don't have two that don't work together and also behave differently even when you pick just one of them... GraaaghhH!
brb, figuring out where Larry Ellison lives...
That one wasn't the one I had issues with, since the concept is essentially the same across all languages. We say it's false because we can't conclusively say that it's true. Same as the reason why null != null in SQL.
The one option that is mandated by an ISO standard.
Besides, if max and min are going to have a value without any parameter, it has to be exactly those Javascript uses. Unless you have a type that define other bounds for your numbers. And null always have a pointer type (that is object in Javascript), for the same reason that NaN always have a number type.
The only one that is bad on that list is D.
typeof null === "object"
was actually a bug in the early implementations, and they decided to keep it in the spec: https://2ality.com/2013/10/typeof-null.html
(see the comment from Brendan Eich)
Tony Hoare: "Introducing NULL was a billion-dollar mistake"
Brendan Eich: "Hold my undefined"
We had one null
, yes. But what about second null
?
C, because yes.
I'd say C too because that's the only one that would be True in a normal programming language and this is javascript so...