Entry tags:
Javascript is insane
'' == '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
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
no subject
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
"NaN == NaN" is false by IEEE standard. However, the whole idea of "!NaN" (logical negation of NaN?!) is crazy.