Funny JS Encryption

Funny JS Encryption that just works! Can also be done on http://www.jsfuck.com/

by Sree K

HTML

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<h1>
Input
</h1>
<textarea id="input" rows="5" placeholder="Just start typing" class="form-control"></textarea>
<h1>
Output
</h1>
<pre><code id="output">Output will appear here</code></pre>
<h1>Output
<small>eval()</small>
</h1>
<pre><code id="output_eval">Output will appear here</code></pre>

JavaScript

document.getElementById("input").focus();
function obs(inputstr) {
	let mystr = [];
	let fal = `(![]+[])`;
	let tru = `(!![]+[])`;
	let und = `([]+[]+[][[]])`;
	let obj = `(typeof [])`;
	let numb = `(typeof +[])`;
	let stri = `(typeof ([]+[]))`;
	let bool = `(typeof ![])`;
	let arr = `(([]).constructor.name)`;
	let reg = `(RegExp().constructor.name)`
	let idk = `([]+[]+([]).constructor)`;
	let num = [];
	num[0] = `(+[])`;
	num[1] = `(+!+[])`;
	num[2] = `((+!+[])+(+!+[]))`;
	num[3] = `(+!+[]+((+!+[])+(+!+[])))`;
	num[10] = `(+[+!+[]+[+[]]])`;
	num[100] = `(+[+!+[]+[+[]+[+[]]]])`;
	let str = {
		'1': `(+!+[]+[])`,
		'2': `([]+((+!+[])+(+!+[])))`
	};

	inputstr.toLocaleLowerCase().toString().split('').forEach( (l, k) => {
		switch (l){
            case 'a': mystr[k] = `${fal}[${num[1]}]`; break;
            case 'b': mystr[k] = `${obj}[${num[1]}]`; break;
            case 'c': mystr[k] = `${obj}[${num[2]}*${num[2]}]`; break;
            case 'd': mystr[k] = `${und}[${num[2]}]`; break;
            case 'e': mystr[k] = `${und}[${num[3]}]`; break;
            case 'f': mystr[k] = `${fal}[${num[0]}]`; break;
            case 'g': mystr[k] = `${stri}[${num[10]}/${num[2]}]`; break;
            case 'h': mystr[k] = `'h'`; break;
            case 'i': mystr[k] = `${und}[${num[10]}/${num[2]}]`; break;
            case 'j': mystr[k] = `${obj}[${num[2]}]`; break;
            case 'k': mystr[k] = `'k'`; break;
            case 'l': mystr[k] = `${fal}[${num[2]}]`; break;
            case 'm': mystr[k] = `${numb}[${num[2]}]`; break;
            case 'n': mystr[k] = `${und}[${num[1]}]`; break;
            case 'o': mystr[k] = `${bool}[${num[1]}]`; break;
            case 'p': mystr[k] = `${reg}[${num[2]}+${num[3]}]`; break;
            case 'q': mystr[k] = `'q'`; break;
            case 'r': mystr[k] = `${tru}[${num[1]}]`; break;
            case 's': mystr[k] = `${fal}[${num[3]}]`; break;
            case 't': mystr[k] = `${tru}[${num[0]}]`; break;
            case 'u': mystr[k]...