Javascript is insane
Mar. 15th, 2013 06:58 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
'' == '0' // false 0 == '' // true 0 == '0' // true !0 == true // true !1 == false // true false == 'false' // false false == '0' // true false == undefined // false false == null // false null == undefined // true " \t\r\n" == 0 // true NaN === NaN // false !!NaN === !!NaN // trueI recently saw someone prefacing their code with
var t=!0;... Because they wanted to save space in their code by replacing every occurrence of true with t, and also wanted so save two bytes while declaring what t was.
And I thought Perl invited abuse!
If you see anyone doing this, pour your drink on their head.
no subject
Date: 2013-03-16 03:18 am (UTC)In the interest of creating human-readable and maintainable code, such hacks should only be applied by machines in a pre-processing phase. (Such as JS minify'rs. "!0" is something that a smart JS compressor ought to handle for you.)
Recently I found a JS compressor that builds an array of every alphanumeric word used in your code, then packs the code as a series of digits and performs a massive search-and-replace-and-then-eval() at runtime.
Also: The PHP truth table.
Also: All languages are terrible in specific ways.
</rant>
no subject
Date: 2013-03-16 03:23 am (UTC)no subject
Date: 2013-03-16 03:52 am (UTC)Seems it would make JS compression a tool only for code obfuscators...
Speaking of which, I'm learning all about the fun to be had by replacing "if" statements with the "&&" operator, and using the Javascript comma to chain together statements for no good reason, by reading obfuscated code:
no subject
Date: 2013-03-16 12:25 pm (UTC)"NaN == NaN" is false by IEEE standard. However, the whole idea of "!NaN" (logical negation of NaN?!) is crazy.