this post was submitted on 17 May 2025
495 points (97.9% liked)

Programmer Humor

23912 readers
1300 users here now

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

founded 2 years ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[–] jaark@infosec.pub 83 points 3 weeks ago (6 children)

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.

[–] ImplyingImplications@lemmy.ca 97 points 3 weeks ago (2 children)

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.

[–] bss03@infosec.pub 35 points 3 weeks ago (1 children)

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

[–] timhh@programming.dev 4 points 2 weeks ago

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.

[–] CameronDev@programming.dev 37 points 3 weeks ago* (last edited 3 weeks ago) (2 children)
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.

[–] wise_pancake@lemmy.ca 12 points 3 weeks ago* (last edited 3 weeks ago) (2 children)

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?

[–] CameronDev@programming.dev 14 points 3 weeks ago (2 children)

I am also not a JS dev, we possibly aren't brain damaged enough to understand the perfection.

[–] peoplebeproblems@midwest.social 9 points 3 weeks ago (1 children)

I develop with JS? All I can say is I need more brain damage to understand where is out

[–] sp3ctr4l@lemmy.dbzer0.com 7 points 3 weeks ago

Just keep developing with it, you'll get CTE soon.

[–] Venator@lemmy.nz 7 points 3 weeks ago (1 children)

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...

[–] CameronDev@programming.dev 4 points 3 weeks ago (1 children)

For such a terrible language, it really has staying power...

[–] bss03@infosec.pub 6 points 3 weeks ago (1 children)

JS is the machine code of the web. Fewer and fewer people might write it directly, but it will live as long as the web platform does.

[–] bufalo1973@lemm.ee 2 points 3 weeks ago (1 children)

Until some browser can make pages with Python, maybe.

[–] bss03@infosec.pub 3 points 2 weeks ago (1 children)

Only if that browser somehow becomes overwhelmingly popular in a market segment BEFORE it gets JS support.

[–] Venator@lemmy.nz 2 points 2 weeks ago

Could make a transpiler for python -> js, and serve python to the browser with a fallback to js if the python isn't supported by the browser

[–] bss03@infosec.pub 1 points 3 weeks ago* (last edited 3 weeks ago)

All functions built with function name(args) { body } syntax have a length based on the form of args. Other ways to create functions might set length (I'm not sure). Most of the functions provided by the runtime environment do have a length, usually based on the number of "required" arguments.

Its the min value of the input params, or Infinity.

And the reason it's Infinity If there is no input, for better or worse, under the hood the method is assigning a variable, min, the highest value possible and then comparing it to each element in the list, reassigning it when it encounters an element lower than its value at the time. So it will obviously always be reassigned if there are any elements at all (if they're less than Infinity, I guess). But if there are no elements, it's never reassigned, and thus returns Infinity. It could have just signed min to the first element instead if Infinity, but that would lead to a runtime error when min was run without a function. If you're not going to throw a runtime error though, it makes sense for min to return Infinity because, what other number could you return that couldn't actually be the minimum

[–] moomoomoo309@programming.dev 30 points 3 weeks ago* (last edited 3 weeks ago) (1 children)

It's C, NaN is never equal to itself in floating point, that's not just a JS thing.

[–] entropicdrift@lemmy.sdf.org 11 points 3 weeks ago (1 children)
[–] 0x0@lemmy.dbzer0.com 21 points 3 weeks ago
[–] kryptonianCodeMonkey@lemmy.world 12 points 3 weeks ago

Narrator: "It wasn't B."

[–] KindaABigDyl@programming.dev 11 points 3 weeks ago (2 children)

Fun fact, even tho B is False, Math.min > Math.max is true

[–] CameronDev@programming.dev 20 points 3 weeks ago

That is not a fun fact. How do I unsubscribe :D

[–] lunarul@lemmy.world 6 points 3 weeks ago
[–] sp3ctr4l@lemmy.dbzer0.com 9 points 3 weeks ago* (last edited 3 weeks ago) (3 children)

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...

[–] Zos_Kia@lemmynsfw.com 4 points 3 weeks ago (1 children)

Notch? The guy who codes in java?

[–] sukhmel@programming.dev 3 points 3 weeks ago (1 children)

That's just short for JavaScript, isn't it?

[–] Zos_Kia@lemmynsfw.com 3 points 3 weeks ago

Java is actually twice faster cause the name is twice shorter

[–] jaark@infosec.pub 4 points 3 weeks ago* (last edited 3 weeks ago) (2 children)

I don't think my sanity can take all of these explanations.

Though I just spotted one that's worse than null being an object ..

typeof NaN
"number"

I mean, come on.. it's even in the fucking name!

Edit - fixed capitalisation in 'NaN'

[–] zarkanian@sh.itjust.works 5 points 3 weeks ago

Douglas Crockford has a whole chapter of these in his latest book. There's also this classic video.

[–] zea_64@lemmy.blahaj.zone 4 points 3 weeks ago

Number = IEEE-754 double precision float, which includes NaN, so it makes sense

[–] traches@sh.itjust.works 2 points 3 weeks ago

It’s pretty easy to avoid all of these, mostly by using ===. Null being an object is annoying and is one of the reasons ‘typeof’ is useless, but there are other ways to accomplish the same thing.

JavaScript has a lot of foot guns, but it’s also used by literally everyone so there is a lot of tooling and practice to help you avoid them.