11
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JSF**k講座 3限目【関数の実行】

Last updated at Posted at 2024-07-24

初めに

初手謝罪です
4限目にはhelloworldかけるなどとほざきましたが、6限目以降になってしまいそうです
毎日更新するので許してください


2限目の復習をしっかりとしておきましょう
2限目ではJSFで文字を書く仕組みと、
false, true, undefined, NaN, Infinity,から取れる文字と0~9の数字たちを得る方法を教えています

第3限の内容

JSFで得られた文字列を関数で実行する方法と、それを使うのに必要な新たな文字たちc, oを得る方法を話していきます

c, oconstructorに使います具体的な使用用途はきちんと書きます
仕組みはまた今度説明します

function at() { [native code] }

function at() { [native code] }

今回必要なc, oだけでなく、(, ), [, ], ,等得ることができる非常に有用なコードです

,はともかく他の4つは使えるじゃないか、と思った方もいるかもしれません
しかし、Stringとしてこの4つの記号を得ないと、プログラムに使えないため、非常に大切です
実際に

)+[]

などと書いてもSyntaxErrorが帰ってきてしまいます

では実際に書き方を見てみましょう

[][[((![]+[])[+!![]])+((!![]+[])[+[]])]]

と書きます

これをみても何やってるかさっぱりわからんと思うので、解説していきます

[][[((![]+[])[+!![]])+((!![]+[])[+[]])]]
//[]['at']

を実行して帰ってくるのはこの関数を表す表記です
codeblockでの表現方法わからなかったです
image.png

f というものに今回必要なc, oが詰まっています

ではどのようにc, oを取り出すのでしょうか?

[][[((![]+[])[+!![]])+((!![]+[])[+[]])]]+[]
//"function at() { [native code] }"

最後に+[]をつけ、先ほどまでの文字列をStringにしてあげるだけで求めていた文字列が手に入ります

これはなぜかというと、f とはfunctionが省略されて表示されていただけのため、Stringに直すことにより、省略する対象と認識されなくなるためです

以上のことを踏まえてfunction at() { [native code] }から新たに得られる文字列は以下の通りです

([][[((![]+[])[+!![]])+((!![]+[])[+[]])]]+[])[+!![]+!![]+!![]]
//'c'

([][[((![]+[])[+!![]])+((!![]+[])[+[]])]]+[])[+!![]+!![]+!![]+!![]+!![]+!![]]
//'o'

([][[((![]+[])[+!![]])+((!![]+[])[+[]])]]+[])[+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]]
//' '

([][[((![]+[])[+!![]])+((!![]+[])[+[]])]]+[])[(+!![])+(+!![]+[])]
//'('

([][[((![]+[])[+!![]])+((!![]+[])[+[]])]]+[])[(+!![])+(+!![]+!![]+[])]
//')'

([][[((![]+[])[+!![]])+((!![]+[])[+[]])]]+[])[(!![]+!![])+(+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[])]
//'['

([][[((![]+[])[+!![]])+((!![]+[])[+[]])]]+[])[(!![]+!![])+(+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[])]
//']'

([][[((![]+[])[+!![]])+((!![]+[])[+[]])]]+[])[(+!![]+!![]+!![])+(+![]+[])]
//'{'

([][[((![]+[])[+!![]])+((!![]+[])[+[]])]]+[])[(+!![]+!![]+!![])+(+![]+[])]
//'}'

以上の文字を新しく収穫できます
大豊作ですね

関数の実行方法

今回は「そうなんだ」で理解してください
後日詳しく解説した記事を投稿します

まずは事前に用意しておいたconstructorをもってきます

([][[((![]+[])[+!![]])+((!![]+[])[+[]])]]+[])[+!![]+!![]+!![]]+([][[((![]+[])[+!![]])+((!![]+[])[+[]])]]+[])[+!![]+!![]+!![]+!![]+!![]+!![]]+(([][[]])+[])[+!![]]+(![]+[])[+!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+(([]+[[]])[+[]]+[])[+[]]+([][[((![]+[])[+!![]])+((!![]+[])[+[]])]]+[])[+!![]+!![]+!![]]+(!![]+[])[+[]]+([][[((![]+[])[+!![]])+((!![]+[])[+[]])]]+[])[+!![]+!![]+!![]+!![]+!![]+!![]]+(!![]+[])[+!![]]
//'constructor'

そして関数を実行するコードは以下の通りです

[][[[((![]+[])[+!![]])+((!![]+[])[+[]])]]+[]][([][[((![]+[])[+!![]])+((!![]+[])[+[]])]]+[])[+!![]+!![]+!![]]+([][[((![]+[])[+!![]])+((!![]+[])[+[]])]]+[])[+!![]+!![]+!![]+!![]+!![]+!![]]+(([][[]])+[])[+!![]]+(![]+[])[+!![]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+(([]+[[]])[+[]]+[])[+[]]+([][[((![]+[])[+!![]])+((!![]+[])[+[]])]]+[])[+!![]+!![]+!![]]+(!![]+[])[+[]]+([][[((![]+[])[+!![]])+((!![]+[])[+[]])]]+[])[+!![]+!![]+!![]+!![]+!![]+!![]]+(!![]+[])[+!![]]](/*任意のString型で記述されたコード*/)()

これは何を記述したかというと

[]['at']['constructor'](/*任意のString型で記述されたコード*/)()

と記述されています
これにより

Function()()

と同じコードを書くことができます

終わりに

多くの方に反応をいただけて本当に嬉しい限りです
ありがとうございます

今更ではありますが、変な文章や間違えている点がありましたらご指摘いただけると幸いです

ぜひ

[]['at']['constructor'](/*任意のString型で記述されたコード*/)()

でさまざまなコードを実行してみてください

4限ではやっと全ての英字(小文字)を使えるようになります!

一応今回の内容でalertなどのコードがJSFのみで書けるようになったため、簡単なコードの例などもチートシートに載せておきます

時間割

1限目
JSF**k講座1限目【基礎講座】
2限目
JSF**k講座2限目【最初の文字たち】
3限目
JSF**k講座3限目【関数の実行】(ここ)
4限目
JSF**k講座4限目【全ての英字(小文字)】

チートシート
JSFチートシート

11
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?