1009
JavaScript
(lemmy.ml)
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.
This is too stupid so I had to check.
Fuck me.
Hm, playing devil's advocate, I think it is because the minus has not been defined as a string operation (e.g. it could pop the last char), so it defaults to the mathematical operation and converts both inputs into ints.
The first is assumed to be a concat because one of the parcels is a string...
It's just doing a lot of stuff for you that it shouldn't be in first place 🤭
Yup. It's completely inconsistent in its interpretation of the + operator.
Yeah, I actually had to try 1+"11" to check that it didn't give me 12, but thankfully ~~it commutes~~ it's consistent 😇
Maybe the behaviour with regard to type conversion, but not for the operation itself.
"13"+12 and 12+"13" don't yield the same result.
Nor would I expect "1312" to equal "1213".. Still that operator with these operands should just throw an exception
Given it's JavaScript, which was expressly designed to carry on regardless, I could see an argument for it returning NaN, (or silently doing what Perl does, like I mention in a different comment) but then there'd have to be an entirely different way of concatenating strings.
Why would you need an entirely different way of concatenating strings? "11" + 1 -> exception. "11" + to_string(1) = "111"
You're right. I've got too much Perl on the brain and forgot my roots. There is a language that does what you're talking about with the '+' operator: BASIC
Good luck getting the same thing retrofitted into JavaScript though. I can imagine a large number of websites would break or develop mysterious problems if this (mis)behaviour was fixed.
I don't think there's a way to retrofit JS - but php versions are deprecated all the time. Why not do the same with client-side script versions? :)
I'm surprised they didn't borrow
On Error Resume Next
from Visual Basic. Which was wrongly considered to be the worst thing in Visual Basic - when the real worst thing wasOn Error Resume
.On Error Resume Next
at least moved on to the next line of code when an error occurred;On Error Resume
just executed the error-generating line again ... and again ... and again ... and again ...Yeah, this looks dumb on the surface, but you've got bigger problems if you're trying to do math with strings
Better than doing physics with strings
Kinda like log4j!
From all the Javascript quiks this is the least stupid and the most obvious.
pro tip:
This has got to be baNaNa
That is absolutely
(n > 1) * ("ba" + 0/0 + "a")
Uncaught ReferenceError: n is not defined
?
🫣
Unfortunately, it makes sense if you know what + means, which is concatenate. - is strictly a math function though.
Not saying that makes this better. It just makes sense.
It is 'comprehensible' in the sense that it's possible to figure out how it happened, but it absolutely does not "make sense" in terms of being a reasonable language design decision. It's 100% incompetence on the part of the person who created Javascript.
I mean, I'd never try to do this anyway because if the types aren't the same unexpected things can happen. That's like programming 101.
Exactly, which is why designing the language to allow it is incompetence.
Fair enough.
Thanks for saving me the typing.
It makes perfect sense if the Lang objective is to fail as little as possible. It picks the left side object, checks if the operand is a valid operand of the type. If it is, it casts the right variable into that type and perform the operand. If it isn't, it reverses operand positions and tries again.
The issue here is more the fact that + is used both as addition and as concatenation with different data types. Well, not an issue, just some people will complain.
Computing a nonsensical result is itself a failure. Continuing to run while avoiding giving an error in that case accomplishes nothing but to make the program harder to debug.
I think I'm on the side of "if you do this in your code, you deserve what you get."