In defense of JavaScript oddities

Andrea Chiarelli
Feb 2 · 3 min read
People photo created by freepik —

My fellow members! Ladies and gentlemen of the court!
My client has too often unfairly been an object of ridicule and public derision. Too many times developers, especially the developers of other languages, have made fun of him and laughed at him. They insist on considering it, so to speak, weird, bizarre, geeky.

Most of the reasons for these attacks on my client are based on alleged oddities such as

[] == ![]    // -> true


NaN === NaN             // -> false
Math.max()>Math.min() // -> false

or even

[] == ''   // -> true
[] == 0 // -> true
[''] == '' // -> true
[0] == 0 // -> true
[0] == '' // -> false
[''] == 0 // -> true

What are we talking about? What are the oddities?

What’s strange about the fact that, if you submit this request to my client

{} + []

he answers with “0”? Where’s the oddity?
Perhaps the strangeness is not so much in the answer as in the question. How can you expect, if you ask my client such a shabby question, to get an answer that makes sense?
My client answers “0”, but he might as well answer “42”. I do not see why a different answer could be considered less strange than this one.
Perhaps he’d be better off doing what others languages do in this situation, that is raising an exception, getting angry and probably insulting their interlocutor?
No, sirs. My client has a sense of humor and has no intention of offending anyone.
He realizes the absurdity of the request and responds in tone, with an answer of the same tenor.

The classic objection, gentlemen of the court, is that not only my client is strange, but he is not even consistent, since to the following request

[] + {}

he does not respond again with “0”, but with “[object Object]”.

Even here, where is the strangeness? Who said that the “+” operation between an array and an object is commutative? No one is surprised that the result of “foo” + “bar” is different from the result of “bar” + “foo”. But if my client gives a different answer when you change the order of the operands, then he is strange.

Another objection against my client is that it is not a true OOP language because it has no classes, or rather the classes it has are not real classes.
First: who said that an OOP language must have classes?
Second: OK, my client has been a little ambiguous in supporting the new keyword and the class keyword. But he did it in good faith, to feel equal to the other languages that snubbed him.

I can’t hide the fact that my client is a bit different from the other languages, but not so different as to deserve mockeries and insults.

The truth is that those who accuse my client of strangeness do not know him and do not want to try knowing and understanding him.
They are so used to rigid languages and without the slightest sense of humor (I would dare to say, without a soul) that they mistake jokes with strangeness and inconsistencies.
But if only these gentlemen try to know him better, to enter into intimacy with my client, they would discover that everything has a reason, that probably the issue is not in the answers that my client gives, but in the questions asked by developers.

Andrea Chiarelli

Written by

Software developer and technical author.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade