JSFuck
JSFuckはJavaScriptのような文法の難解プログラミング言語で、コードは[,], (、)、!と+の6文字で構成される。ネーミングセンスはBrainfuckを参考にしていて、難解プログラミング言語の中ではアルファベットが一文字も使われない。コンパイラかインタプリタを必要とするBrainfuckとは異なり、JSFuckは(文法的に)JavaScriptと互換性があり、WebブラウザやJavaScriptエンジンで動作させることができる。JSFuckはJavaScriptが動的型付けのため、完全にJavaScriptの関数を上記の6文字で置き換えることができる。2009年7月にハセガワヨウスケがJavaScriptを[]()!+,\"$.:;_{}~=の18文字に変換するWebアプリケーションを作った。
2010年1月には、 sla.ckers.orgというWebアプリケーションセキュリティサイトの「Obfuscation」フォーラムで非公式の競争が開催され、文字数を(当時そうだろうと考えられていた)必要最小限の8文字([]()!+,/)に抑える方法が考案された。 その後、どうにか , と / を使わないようにできないか模索され、
同年3月にはJS-NoAlnumと呼ばれる(現在の)6文字で表現されるエンコーダーができた。

同年の終わりハセガワはJSF*ckと呼ばれる6文字で表現されるエンコーダーを完成させた。
2012年には、Martin Kleppe が"jsfuck"と名前をつけたプロジェクトをGitHub上で公開した。

そしてJSFuck.comというサイトでエンコーダーの実装を公開している。

JSFuckは悪質なコードをウェブサイトにクロスサイトスクリプティング (XSS)等によって埋め込むことにも使われたことがある。他の潜在的な使用方法としては、難読化がある。 よく使われるライブラリであるjQueryも、6文字で完全に置き換えられたことがある。
変換の手順
JSFuckは非常に冗長である。JavaScriptではalert("Hello World!")としてポップアップを開くであろうコードは21字である。しかし、同じことを JSFuckでしようとすると22948字にもなる。いくつかの文字はJSFuckで表現しようとすると1000文字を超える。この節はどうやって文字を生成することができるのか説明する。
数字
0は+[]によって作られる。ここで、[]は空の配列であり、+は単項プラスである。ここに型変換が働いて、 []は0とみなされる。
1は+!![] か +!+[]で、論理値true (JSFuckでは!![]か!+[]として表現される)が数字の1に変換されたものである。
2から9については、!![] (前述の通り1)をその回数だけ繰り返し、それを+で連結すれば良い。
これを踏まえると2は!![]+!![]や!+[]+!+[]と書くことができる。
2桁以上の場合は、1桁ずつ数字として配列に詰めたあと、それを1要素連結すればよい。
例として"10"は[1] + [0]と書き換えることができる。
前述の0と1の作り方を適用すると、これは[+!+[]]+[+[]]となる。
数字を返したい場合は、頭に+をつける(この例では10 = +([+!+[]]+[+[]]))
他の生成
FunctionのコンストラクタはJavaScriptとして有効なコードを実行することができるので、alert(1)はFunction("alert(1)")()と同じである。Functionのコンストラクタは[]["filter"] (Array.prototype.filter)のようにして取り出せることはよく知られたことである。このことを踏まえると、alert(1)は[]["filter"]["constructor"]("alert(1)")()と書き換えることができる。
セキュリティ
JSFuckのような難読化技術は、「通常の」JavaScriptに備わる"クラッキング防止システム"が存在しないため、eBayのオークションのページにJSFuckで書かれたスクリプトを埋め込むことができた。