3

この質問この自動ジェネレーターのように、私は角かっこと他の記号だけでJavascriptを難読化することをいじくり回してきました-純粋に教育的な理由で、私は言うかもしれません:)

たとえば、評価(![]+[])[+!+[]]すると文字が表示され"a"ます。

[].sort.call()ただし、例はウィンドウオブジェクトを返すことに依存しているようです。私の問題は、これが私がインストールしたブラウザ(Chrome 14、FF 9、IE 9)のいずれでも機能しないように見えるときはいつでも:

//They told me this would return the window object
[].sort.call() 

//But I get an exception instead:
"TypeError: Array.prototype.sort called on null or undefined"

だから私は尋ねます:

  • 最近のブラウザで修正されましたか[].sort.call()、それともウィンドウオブジェクトが返され、私が何か間違ったことをしているだけですか?
  • このアプローチを使用できなくなった場合、角かっこ、括弧、感嘆符、および+演算子のみを使用してウィンドウオブジェクトにアクセスできる他の方法はありますか?
4

1 に答える 1

3

これは ECMAScript 5 で変更されました。15.3.4.4から:

注意thisArg 値は、変更せずにthis値として渡されます。これは、未定義またはnullの thisArg がグローバル オブジェクトに置き換えられ、ToObjectが他のすべての値に適用され、その結果がthis値として渡される第 3 版からの変更です。

...そして、このsort()値を呼び出しToObjectて、例外をスローします。TypeError

また、グローバル オブジェクトへのアクセスをさらに削減する strict mode の追加を考えると、オプションおそらくほとんどありません。ただし、なしで、を使用してみてください。"use strict"this

于 2012-05-30T22:45:58.223 に答える