&gt; JS is in exactly the same league with Python and Ruby and Perl other similar dynamic languages<p>There&#x27;s a big difference to strongly typed dynamic languages  that go out of their way to catch programming mistakes at runtime. With JS you get some &quot;wtf&quot; result when things go wrong and it propagates a long way before manifesting (if it&#x27;s caught at all). Combine with JS&#x27;s many weird semantics and special cases that are hard to keep in mind at once...<p>Recent favourite (minimized case after discovering unexpected piles of NaN&#x27;s in some faraway place)<p><pre><code>  &gt; parseInt(&quot;0&quot;)
  0
  &gt; parseInt(&quot;1&quot;)
  1
  &gt; parseInt(&quot;2&quot;)
  2
  &gt; [&quot;0&quot;, &quot;1&quot;, &quot;2&quot;].map(parseInt)
  [ 0, NaN, NaN ]</code></pre>