I’ve never really found the type conversions that bizarre, unless you’re doing something weird like casting an array to a string or number. I don’t really use strange type casts, since I use TypeScript and avoid using the “==“ operator. What other things make it not good?
I’m pretty sure most people do not like JS’s loosey-goosey, who-knows-what-ur-gonna-get type system, which is why TS is so popular. Not really surprising since the bones of the language were basically spat out in a couple weeks. TS is a custom type system on top of JS, meaning it’s not just JS’s type system expressed through strict typing. They added a bunch of useful features like discriminated unions and so on to make using TS more pleasant than raw JS.
TS is actually usable (although NPM and the environment built around it still suck). It’s inherited a bunch of weird shit from JS, but the type system generally makes them bearable.
Have you ever looked at the original JS implementation? It looks nothing like what JS is today. Saying the bones were spat out in a couple weeks is like saying Linux was developed in a few months.
TS transpiles to JS, and any JS is valid TS. Take any TS, remove the types (and some syntactic sugar) and you have JS. I feel like if you like TS but not JS, you just don’t like loosely typed languages. That’s just a preference. It doesn’t make a language bad.
Have you ever looked at the original JS implementation? It looks nothing like what JS is today. Saying the bones were spat out in a couple weeks is like saying Linux was developed in a few months.
And yet working groups have spent literal decades trying to make JS less shitty. The fundamental basics of JS can’t be changed in backwards incompatible ways without breaking a huge number of websites. The Linux comparison is just wrong because Linux has broken backwards compatibility to fix problems. A better comparison would be Linux’s policy to never break userspace. Backwards incompatible changes to JS would break a bajillion websites, much like breaking userspace would break a bajillion programs.
TS transpiles to JS, and any JS is valid TS. Take any TS, remove the types (and some syntactic sugar) and you have JS. I feel like if you like TS but not JS, you just don’t like loosely typed languages. That’s just a preference. It doesn’t make a language bad.
JS is valid TS. TS is not valid JS. This is the fundamental point. TS essentially fixes issues that JS cannot fix without breaking the world.
Loose typing is fine if the language’s type system isn’t insane. I prefer static typing, but as long as the type system is coherent, it’s not an issue.
TBH IMO the only reason JS became popular is because it was provided by web browsers, and if you wanted to make your site do anything complex, you thus needed to use JS. This eventually led to the JS VMs being very fast, so Node was created, and now it’s all over since you can learn one language for web and server.
JS has been made less shitty. I’ll give you that old JS was pretty shitty. Like v5 and lower were a huge pain. But a lot of that was because of the lack of modern language features that other languages had at the time. ES6 introduces some huge improvements that made JavaScript much less frustrating. Personally, at this point, I have very few pain points with the language.
I don’t think being included in browsers is the only reason JS became so popular, but it’s definitely the biggest reason. That doesn’t make it a bad language.
Yes, but some are VERY opinionated about it. It’s almost religious with them. I think it’s silly. Both have their pros and cons. I honestly enjoy both and never had a big issue with loosely typed languages. I assume it’s just bad developers that mess up and get confused about it.
I started my career with Visual Basic (3!) and I appreciated the loose typing because it meant I could get going and actually have something running quickly as a newbie. A few years later I switched to C# and saw how an entire class of errors disappeared because of the strong typing. Both have their place, depending on the skill level of the coder and the needs of the application.
Yeah, I’ve seen a lot of those videos where they do things like {} + [], but why would anyone care what JS does in that case? Unless you’re a shit-ass programmer, you’re never going to be running code like that.
The idea behind that kind of type conversion was that JS was originally designed to be extremely lenient. If it ever crashed, the web page would freeze, so it lets you do things other languages just crash from, like divide by zero.
Yeah, I’ve seen a lot of those videos where they do things like {} + [], but why would anyone care what JS does in that case? Unless you’re a shit-ass programmer, you’re never going to be running code like that.
By this same logic, memory safety issues in C/C++ aren’t a problem either, right? Just don’t corrupt memory or dereference null pointers. Only “a shit-ass programmer” would write code that does something like that.
Real code has complexity. Variables are written to and read from all sorts of places and if you have to audit several functions deep to make sure that every variable won’t be set to some special value like that, then that’s a liability of the language that you will always have to work around carefully.
A language’s deficiencies are rarely obvious when everyone is writing it perfectly.
But a coherent type system gives the programmer confidence - for free. Do you know what [1] + [2] is in JavaScript? Do you know what type it is? JavaScript teaches you that it has operator overloading for built-in types but then it behaves in such a dumb way you can’t use it.
That’s explained by a desire to be extremely lenient, but it’s not justified by it. Programming langauges are generally not made by idiots, so every bad decision has an explanation.
I would assume [1] + [2] would give you either 0 or 2, but maybe "12". But why you ever write that? I’ve never bothered to memorize what happens there because I would never write that. The plus operator is not for arrays. It’s for numbers and strings. If you’re trying to concatenate arrays, there’s a function for that. Would you do that in Java or C? People trying to make JavaScript do silly things just because it refuses to crash when you do then calling the language bad for it is just silly to me.
What makes it not good?
https://www.destroyallsoftware.com/talks/wat
The completely bizarre implicit type conversions, for one thing.
I’ve never really found the type conversions that bizarre, unless you’re doing something weird like casting an array to a string or number. I don’t really use strange type casts, since I use TypeScript and avoid using the “==“ operator. What other things make it not good?
I mean, just the fact that you’re using TS instead of plain JS (and that TS even exists) should tell you that the language has issues…
It’s just strict typing on top of plain JS. I like strict typing. Some people like loose typing.
I’m pretty sure most people do not like JS’s loosey-goosey, who-knows-what-ur-gonna-get type system, which is why TS is so popular. Not really surprising since the bones of the language were basically spat out in a couple weeks. TS is a custom type system on top of JS, meaning it’s not just JS’s type system expressed through strict typing. They added a bunch of useful features like discriminated unions and so on to make using TS more pleasant than raw JS.
TS is actually usable (although NPM and the environment built around it still suck). It’s inherited a bunch of weird shit from JS, but the type system generally makes them bearable.
Have you ever looked at the original JS implementation? It looks nothing like what JS is today. Saying the bones were spat out in a couple weeks is like saying Linux was developed in a few months.
TS transpiles to JS, and any JS is valid TS. Take any TS, remove the types (and some syntactic sugar) and you have JS. I feel like if you like TS but not JS, you just don’t like loosely typed languages. That’s just a preference. It doesn’t make a language bad.
And yet working groups have spent literal decades trying to make JS less shitty. The fundamental basics of JS can’t be changed in backwards incompatible ways without breaking a huge number of websites. The Linux comparison is just wrong because Linux has broken backwards compatibility to fix problems. A better comparison would be Linux’s policy to never break userspace. Backwards incompatible changes to JS would break a bajillion websites, much like breaking userspace would break a bajillion programs.
JS is valid TS. TS is not valid JS. This is the fundamental point. TS essentially fixes issues that JS cannot fix without breaking the world.
Loose typing is fine if the language’s type system isn’t insane. I prefer static typing, but as long as the type system is coherent, it’s not an issue.
TBH IMO the only reason JS became popular is because it was provided by web browsers, and if you wanted to make your site do anything complex, you thus needed to use JS. This eventually led to the JS VMs being very fast, so Node was created, and now it’s all over since you can learn one language for web and server.
JS has been made less shitty. I’ll give you that old JS was pretty shitty. Like v5 and lower were a huge pain. But a lot of that was because of the lack of modern language features that other languages had at the time. ES6 introduces some huge improvements that made JavaScript much less frustrating. Personally, at this point, I have very few pain points with the language.
I don’t think being included in browsers is the only reason JS became so popular, but it’s definitely the biggest reason. That doesn’t make it a bad language.
Backwards incompatible changes have been introduced in JS a number of times. They are opt in at the script level and enforced in newer language contexts.
Yes, but some are VERY opinionated about it. It’s almost religious with them. I think it’s silly. Both have their pros and cons. I honestly enjoy both and never had a big issue with loosely typed languages. I assume it’s just bad developers that mess up and get confused about it.
I started my career with Visual Basic (3!) and I appreciated the loose typing because it meant I could get going and actually have something running quickly as a newbie. A few years later I switched to C# and saw how an entire class of errors disappeared because of the strong typing. Both have their place, depending on the skill level of the coder and the needs of the application.
If you use typescript you will obviously never see the weird type system of JavaScript
still possible, typescript is only strongly typed if you and everyone else working on the project wants it to be.
Considering TypeScript is a superset of JavaScript, you certainly can. But, that generally means you’re using TypeScript poorly.
Just look up the video entitled “wat” which is mainly about JavaScript
Yeah, I’ve seen a lot of those videos where they do things like
{} + [], but why would anyone care what JS does in that case? Unless you’re a shit-ass programmer, you’re never going to be running code like that.The idea behind that kind of type conversion was that JS was originally designed to be extremely lenient. If it ever crashed, the web page would freeze, so it lets you do things other languages just crash from, like divide by zero.
By this same logic, memory safety issues in C/C++ aren’t a problem either, right? Just don’t corrupt memory or dereference null pointers. Only “a shit-ass programmer” would write code that does something like that.
Real code has complexity. Variables are written to and read from all sorts of places and if you have to audit several functions deep to make sure that every variable won’t be set to some special value like that, then that’s a liability of the language that you will always have to work around carefully.
A language’s deficiencies are rarely obvious when everyone is writing it perfectly.
But a coherent type system gives the programmer confidence - for free. Do you know what
[1] + [2]is in JavaScript? Do you know what type it is? JavaScript teaches you that it has operator overloading for built-in types but then it behaves in such a dumb way you can’t use it.That’s explained by a desire to be extremely lenient, but it’s not justified by it. Programming langauges are generally not made by idiots, so every bad decision has an explanation.
I would assume
[1] + [2]would give you either0or2, but maybe"12". But why you ever write that? I’ve never bothered to memorize what happens there because I would never write that. The plus operator is not for arrays. It’s for numbers and strings. If you’re trying to concatenate arrays, there’s a function for that. Would you do that in Java or C? People trying to make JavaScript do silly things just because it refuses to crash when you do then calling the language bad for it is just silly to me.