hasegawayosukeさんのトリックを再構したいのだけれど(2)

ロードマップを考えてみました

なにか指標がないと考えにくいと気がついたのでロードマップをと。

第一段階

整数を作る。たとえば、「0」なら

 +''
これは、型変換で発生しているような気がします。あとは、インクリメント演算子で任意の自然数まで作成可能。

第二段階

使えそうなローマ字を拾いまくって蓄積する。
たとえば、「a」なら。


+{} + ''
最初に「+{}」でもって「NaN」オブジェクトを作成し、空の文字列「''」をプラス記号で結合してあげて強制的にstring型オブジェクトに型変換してあげます。これで文字列「NaN」が作成できました。
次に、この文字列の2番目の文字を切り出してくれば「a」が求められます。Firefoxでは、こうした場合に、strA[1]が可能です。(このためにこそ最初に数字を用意するのだ!)たぶん、Operaも大丈夫なはず。InternetExplorerは全くためしていないのでなんともわかりません。
同様の手段で文字を拾えそうなものを列挙。
  • false
  • true
  • NaN
  • Infinity
  • undefined
  • [object Object]
  • RegExp→gとpとxとが貴重。nativeのvも。

第三段階(以下は未定)

たぶん、escape,unescapeで文字を作成する段階に突入。うーむ。たぶん、「w」はなかなか作れないから、「%」を捏造するしかない。
ん?eとvとaとlが拾えていますね。これは良い兆候。

第四段階

0x1.constructor.constructor
を使って、文字列をevalってさしあげる、というか直接eval関数を最初につくるべきか?

追記

たった今、思いついたのだけれども、「h」がいけそうな気が。


location + ''
httpを切り出したい…と思ったらメソッドが動きましたよ?永久ループかい!(笑)