0

これらのスライドを読んでいて、次の JavaScript の行を見つけました。

 ({} + [])[!![] + !![] + !![]] + (![] + [])[!![] + !![] + !![]]

この行をコンソールで実行すると、「js」が返されます。 コードを変更すると、行は異なる文字を返します。私はほとんど自分の名前を返すことができました(「n」がありません):

({} + [])[!![] + !![] + !![]] + (![] + {})[!![] + !![] + !![] + !![]] + (![] + {})[![] + !![] ]

なぜこれが起こるのですか?これはどのように機能しますか?スライドはそれについて多くの情報を提供しませんでした。

4

2 に答える 2

1

よく見ると、2 つのことが行われています。1 つは空のオブジェクトと配列の追加であり、もう 1 つはインデクサーです。

JS では、{} + []0 を返します

({} + [])「[オブジェクトオブジェクト]」を返します

[] + {}「[オブジェクトオブジェクト]」を返します

![] + {}「false[オブジェクト オブジェクト]」を返します

(![] + [])「偽」を返します

さらに、すべてが型変換可能であるため、true+true= 2 (true は 1 に相当) です。 (ブール値)!![]を返すため、これは3 に等しいことを行うのと同じです。true!![] + !![] + ![]true + true + true

このために、文字列として出力されるものを評価し、それらの文字列にインデックスを付けて個々の文字を取得します。"false" と "Object" という言葉の中から選択するものは何でもあります。

于 2013-04-02T12:49:48.300 に答える