初めに
初手謝罪です
4限目にはhelloworldかけるなどとほざきましたが、6限目以降になってしまいそうです
毎日更新するので許してください
2限目の復習をしっかりとしておきましょう
2限目ではJSFで文字を書く仕組みと、
false
, true
, undefined
, NaN
, Infinity
,から取れる文字と0~9
の数字たちを得る方法を教えています
第3限の内容
JSFで得られた文字列を関数で実行する方法と、それを使うのに必要な新たな文字たちc
, o
を得る方法を話していきます
c
,o
はconstructor
に使います具体的な使用用途はきちんと書きます
仕組みはまた今度説明します
function at() { [native code] }
function at() { [native code] }
今回必要なc
, o
だけでなく、(
, )
, [
, ]
,
,等得ることができる非常に有用なコードです
,はともかく他の4つは使えるじゃないか、と思った方もいるかもしれません
しかし、Stringとしてこの4つの記号を得ないと、プログラムに使えないため、非常に大切です
実際に
)+[]
などと書いてもSyntaxError
が帰ってきてしまいます
では実際に書き方を見てみましょう
[][[((![]+[])[+!![]])+((!![]+[])[+[]])]]
と書きます
これをみても何やってるかさっぱりわからんと思うので、解説していきます
[][[((![]+[])[+!![]])+((!![]+[])[+[]])]]
//[]['at']
を実行して帰ってくるのはこの関数を表す表記です
codeblockでの表現方法わからなかったです
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チートシート