I love it. But I think it cheats a tiny bit by getting a word that requires only characters from "false". It means you're demonstrating the same trick four times.
Maybe you could do a kind of proof:
1. This is how you get any character
2. This is how you call eval()
3. QED
Please run simple code to verify accuracy before publishing it.
The unary plus operator coerces undefined to NaN, not to zero as your article states.
The unary plus operator coerces NaN to NaN, not to zero as your article states. (Remember that NaN is already a number, despite its name.)
If you need to coerce any falsy value to 0, the simplest way is to use bitwise operators. If you want to do it the six character way, I guess use Math.imul
Is there a limit to what one can do with these six characters? Like, now we're reading values from the string "false". We also could read from "true", and maybe undefined (how?). But can one do more? If one can generate "window", one should be able to call functions through window["functionName"]() and do general computing with this, I think?
There's Dwitter, a minimalist JavaScript code community, where we use these kind of tricks to write interesting code, demos and concepts with just 140 characters or less: https://dwitter.net/
This is fascinating! Thanks for the share, I had no idea this even existed. Some of the posts are impressive too. Walther is known for their short reset triggers on their handguns for example.
I've just posted a working code on Dwitter based on this "JavaScript with Only Six Characters", it shows 1e+100 turning into Infinity. https://www.dwitter.net/d/16881
17 comments
[ 2.7 ms ] story [ 49.4 ms ] threadMaybe you could do a kind of proof:
1. This is how you get any character 2. This is how you call eval() 3. QED
The unary plus operator coerces undefined to NaN, not to zero as your article states.
The unary plus operator coerces NaN to NaN, not to zero as your article states. (Remember that NaN is already a number, despite its name.)
If you need to coerce any falsy value to 0, the simplest way is to use bitwise operators. If you want to do it the six character way, I guess use Math.imul
It quickly gets more complicated though, and will require alot more code:
"undefined": [][![]]+[] (empty array accessed at index 0 turned into string)
"NaN": +{}
"[object Object][object Object]": {}+{}
.. etc
See the full list here:
https://github.com/aemkei/jsfuck/blob/master/jsfuck.js