this post was submitted on 27 Dec 2023
707 points (98.5% liked)

Programmer Humor

22245 readers
751 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
 
top 50 comments
sorted by: hot top controversial new old
[–] [email protected] 70 points 1 year ago (2 children)

== is a heathen with no rightful place except equality to null. All praise ===

[–] [email protected] 34 points 1 year ago

That’s what I used to think but it turns out to be the most Christian operator there is.

[–] [email protected] 24 points 1 year ago

Eval works in mysterious ways

[–] [email protected] 29 points 1 year ago (2 children)
[–] [email protected] 18 points 1 year ago* (last edited 1 year ago) (4 children)

that's not "t", it's "\t" which is just a tab. There's also "\n" for newline.

[–] [email protected] 20 points 1 year ago (1 children)

It still makes no sense though

[–] [email protected] 21 points 1 year ago (1 children)

If " " wasn't equal to 0, it wouldn't make sense, but since a string containing a space equals 0, you'd expect the same to apply to a string containing a tab or a newline. (or at least I'd expect that)

[–] [email protected] 6 points 1 year ago (1 children)

I admit I have never dabbled in javascript, despite being a proficient programmer. I now dread to ask... would any string that contains only whitespace == 0? " \t\n \t " for example?

[–] [email protected] 7 points 1 year ago (2 children)

Yes, it would. Just like a string of spaces " " == 0, but it isn't that bad; === is Javascript's version of == in other languages, and, thus, you should be using it if you don't want that wonkiness.

== is just for convenience, like when you want to make sure that the user didn't leave the form empty and the button shouldn't be greyed out, and other UI stuff. Without these kinds of features JS wouldn't be used in so many toolkits.

[–] [email protected] 2 points 1 year ago (1 children)

Ok, I always mistakenly assumed === was the identity operator in JS, too. TIL, thanks! As much as we like to poke fun at JS, every time I'm taught the rationale behind some aspect of it, I find it redeeming and even a little endearing.

[–] [email protected] 5 points 1 year ago (1 children)

The explanation given to you makes it sound like == was deliberately designed to be a more convenient version of ===, but what actually happened was that == used to be the only equality operator in JavaScript, which meant that if you didn't want it's auto-coercing behavior then you needed to go out of your way to add additional type checks yourself. Because this was obviously a tremendously inconvenient state of affairs, the === operator was introduced later so that you could test for equality without having to worry about JavaScript doing something clever underneath the hood that you weren't expecting.

[–] [email protected] 2 points 1 year ago* (last edited 1 year ago)

The explanation given to you makes it sound like == was deliberately designed to be a more convenient version of ===

I mean technically == was deliberately designed to be a more convenient version of other languages' == operator... Just specifically more convenient for light UI stuff since that was all JavaScript was supposed to be used for at the time (or all they thought it would be used for).

But give programmers a way to write and execute a small script and someone will eventually use that to try and write an emulator that emulates the computer it's running on, so the web evolved into more complicated applications, and then that convenience turned out to be wildly inconvenient, not to mention horribly unexpected for programmers coming from other languages, so then they added the triple equality to match other languages.

load more comments (1 replies)
[–] [email protected] 10 points 1 year ago (3 children)

It's a slash-t in the comment. Maybe kbin has different rendering rules for comments?

load more comments (3 replies)
[–] [email protected] 2 points 1 year ago (3 children)

yeah but why is a single character string containing a tab equal to zero ???

[–] [email protected] 2 points 1 year ago* (last edited 1 year ago)

That would be weird if a string containing a space wasn't equal to 0 " " == 0, but that's not the case in JS. If you think that "" and " " being equal to 0 is weird then I agree, but since they are, you should expect "\t" and "\n" to equal 0 too.

load more comments (2 replies)
load more comments (1 replies)
[–] [email protected] 8 points 1 year ago

Yeah, it's true. I knew all the other ones, had to put that one in the dev tools console to believe it. I was just happy to know === continues to be sane in that comparison.

[–] [email protected] 25 points 1 year ago (1 children)

Are people really not using the strict equality operator?

[–] [email protected] 7 points 1 year ago (8 children)

It's still pretty bad that the normal equality operator is as bad as it is.

load more comments (8 replies)
[–] [email protected] 19 points 1 year ago

Violating the transitive property? Go home JavaScript, you're drunk.

[–] [email protected] 18 points 1 year ago

Fuck this language with a pineapple

[–] [email protected] 18 points 1 year ago

"The trinity makes as much sense as Javascript" is a vulgar condemnation of Christian dogma.

[–] [email protected] 17 points 1 year ago (1 children)

Lots of silliness indeed, yet I can't remember the last time I had to use a non-strict comparison.

[–] [email protected] 12 points 1 year ago

Yes, it's been established that you can still use JavaScript, and it will only backfire sometimes, even though it's a bad language. And yet, people try to use it where it's not even required.

[–] [email protected] 11 points 1 year ago

This never gets old lmao

[–] [email protected] 10 points 1 year ago

As a person who is coding adjacent (I work with basic SQL and VBA, once learned but never used HTML & CSS, learned some C+, some JavaScript...) I don't fully understand most of the memes here, but it feels like I'm learning a bit through immersion like being a non-native speaker in a foreign land. It's a fun ride.

[–] [email protected] 6 points 1 year ago* (last edited 1 year ago) (2 children)

=== is just == with extra steps

[–] [email protected] 23 points 1 year ago

It's actually the other way around. == has to perform type coercions as part of its equality algorithm, whereas === does not, so == has more steps.

load more comments (1 replies)
[–] [email protected] 5 points 1 year ago

Gonna show this to my Discrete math professor

[–] [email protected] 5 points 1 year ago (4 children)

I don’t work with web stuff, why is js so weird? Can you write a website in other languages, like c# or python?

[–] [email protected] 23 points 1 year ago (2 children)

Can you write a website in other languages, like c# or python?

sure, as long as it compiles to javascript

[–] [email protected] 7 points 1 year ago (5 children)

But the browser can’t handle other languages? That seems a bit silly

[–] [email protected] 17 points 1 year ago (1 children)

There's a push towards WebAssembly. Officially it's not supported yet, but most browsers can handle it. I don't know how mature the project is though.

But yeah, essentially everything on the web is JS.

[–] [email protected] 15 points 1 year ago (4 children)

Even webassembly needs a JS stub loader right now. I still can't believe that's a requirement.

[–] [email protected] 3 points 1 year ago (1 children)

Sure, but you can get frameworks that generate that for you. I've written whole webpages in WASM without writing any JS.

You don't get around reading JS documentation, though. Especially the DOM API is just documented as JS, and you basically hope that your framework makes it obvious enough how to write that in your non-JS language of choice.

[–] [email protected] 5 points 1 year ago (1 children)

This is exactly the reason why I can't believe that was ever a requirement. I would have crazy respect for webassembly if it could stand on it's own as it would allow people to completely move away from JS, but if JS is still in the stack in any way it will introduce a (even if it is minimal) compatibility and maintenance cost in the long run.

[–] [email protected] 3 points 1 year ago

I used to think so, too, but on the one hand, the DOM API is absolutely massive. Going through the standardization, implementation and documentation process another time would take decades.

And on the other hand, a language-agnostic API in WebAssembly would mean specifying it WebAssembly itself. And well, it's Assembly-like, so what's currently a single line for calling a JS function would turn into tens of lines of low-level code.

Ultimately, you'd want code from some other high-level language to give you a summary of how you may need to call your language-specific wrapper. In practice, that's likely even worse than translating it from JS, because the high-level call isn't standardized.

load more comments (3 replies)
[–] [email protected] 5 points 1 year ago

If they could, JavaScript wouldn't be nearly a popular

[–] [email protected] 3 points 1 year ago

There's actually in theory all the pieces in place to use a different scripting language, because in the early days, there really were multiple. But yeah, the massive DOM API is only really standardized+implemented+documented for JS, so you don't get around it in the end.

As the others said, though, WebAssembly is starting to become a thing and the JS boilerplate for calling the DOM API can be generated for you.

[–] [email protected] 3 points 1 year ago

When you see the entire world agree to one standard about anything, leave it the fuck alone.

load more comments (1 replies)
[–] [email protected] 7 points 1 year ago (1 children)

Most of the weirdness comes from being designed for the web, and specifically for working with forms. The value of a form field will always be a string, which is a simple and straightforward idea, but then the trouble showed up when we tried to make it more convenient to work that way.

[–] [email protected] 17 points 1 year ago (5 children)

Actually, most of the weirdness comes from having been originally designed in a matter of 10 days by a single engineer working to accommodate a tight release schedule.

load more comments (5 replies)
load more comments (2 replies)
load more comments
view more: next ›