JavaScript is a flexible, quirky language that can sometimes leave you scratching your head. If you've spent any amount of time working with JS, yo...
For further actions, you may consider blocking this person and/or reporting abuse
99.1% of these issues people have with JavaScript are caused by trying to compare or manipulate things of different types.
74.8% of these things are common to other programming languages.
I feel like most of the things people find weird about JS are because they're trying to do something that if you stop and think about it for more than a second, well, it doesn't make sense.
This is pretty accurate, but one of the main reasons JavaScript is so popular is its "flexible and forgiving nature." People often mix and match different types because the language allows it. For
example:
console.log(1 + "1"); // "11"
console.log(1 - "1"); // 0
This kind of behavior can confuse new developers. But if you approach JavaScript from the perspective of strongly typed languages (like Java or C#), it might seem "weird."
The truth is, if developers understand type conversions and implicit coercion, JavaScript doesn't feel so strange anymore. And as you said, "if you stop and think about it," most of the problems do go away β that's the golden rule of programming in any language. π
@moopet ,
I agree !!
Itβs true that many JavaScript quirks stem from type coercion and comparison issues, which can often be avoided and not widely used.
Heres a fun one that trips up lots of people...
Yes @freshcaffeine ,
Date
object are zero-indexed. This means 0 is January, 1 is February, and so on.That's why it cause issue.yes, but only month is zero-indexed. But not day and year.. which increased confusion more - I've seen some interesting bugs because of this.
NaN
returns "number" because it is a placeholder for something that should be a number.0
, but I'm guessing it's actuallyInfinity
because subtracting anything fromInfinity
isInfinity
. (Either that or-Infinity
because it subtracts until it cannot subtract any more.)This is a fun article! I'd love to see more of these!
@hbthepencil , thanks for trying , but the actual answers are:
NaN
is technically a special value of the Number in javascript.NaN
. This is because the operation isundefined
βsubtracting two infinite quantities does not yield a finite number or a meaningful result.Ah, I was almost there on the first one... Thanks!
The 0.1 + 0.2 and the 0.1*0.1 is not really JavaScript but because floating point math is not precise when it comes down to storing the bits in memory. Many other languages have the same issue. Less a quark of JavaScript and more of a quark of computer science.
Yes , I agree @rjbaddeley
Great article! For those interested, I've also written a similar piece diving into JavaScript quirks: JavaScript Quirks: What You Need to Know. Feel free to check it out! π
Great post @tomasdevs !!
Finally , the old programming language still have bugs,
console.log(typeof null); // object
which shows no one is perfect even javascriptHaha, yes, even JavaScript has its quirks!
[1,2,3] + [4,5,6] = "1,2,34,5,6"
is asked in my recent interview and I fails to answer it correctly, and after checking the solution I just byheart this and will never forget that.Yes that's tricky one !!
And thats why we use typescript
Exactly @ezekiel_77 , these quirks shows it's important to use typescript in js based projects.
Nice javascript tricky points.
Thanks @works
About #5, you can also use
Object.is(NaN, NaN)
. About #11, parseInt does exactly what is should and returns the integer value of the number. The rest is IEEE754 and type coercion wackyness - and after a few decades of writing JS, those were no longer surprising.About your tricky questions: NaN is of type number, because it is specified like this in IEEE754 (not only in JS) and
Infinity - Infinity
yields NaN.I was just wondering in what situation you have to compare and empty array with an empty object and what other languages can actually do that? Many of those examples are just bad coding or misunderstood how JS works.
For more informative knowledge, it's good article, bit deep down inside, we all know this doesn't matter