6

私の目標は、実際のWebサイトで使用することではなく、知識と楽しみのためです。

私は次のようなものを書きたいです:

var  =3;
alert( );

(スペースではなく、特定のUnicode文字を使用)

出来ますか?そうでない場合、同等のものはありますか?

4

1 に答える 1

3

Unicode空白文字を「生の」名前として使用することはできませんが、角windowかっこ表記を使用して少し魔法をかけることができます。

例えば:

window["    "] = 1;
alert(window["    "]);

JavaScriptはスペースを無視するため、これらは、のプロパティをいじらずに参照できないため、それ自体は「名前」ではありませんがwindow、難読化に関してはうまくいきます。

もちろん、これは任意のオブジェクトに任意に拡張できます。windowは必須ではありませんが、すべてのグローバル変数はのプロパティであるため、これが頭に浮かびましたwindow。そのために、次のようなものを使用できます。

var vars = {};
vars[" "] = 1;
vars["  "] = 2;
vars["   "] = 3;

alert(vars[" "] + vars["  "] + vars["   "]);

これは、空白で名前が付けられた変数を持つことができるのと同じくらい近いと思います。それらはキーワードの意味では真の変数ではありませんvarが、あなたが来る可能性が高いほど近いものです。

もちろん、プロパティとしてUnicode空白文字を使用することもできます。

var vars = {};
vars[" "] = 1; // uses em quad, U+2001
alert(vars[" "]); // real variable, alerts 1
alert(vars[" "]); // fake variable, alerts undefined

この場合、プロパティとしてU+2001を使用します。それは、文字列内の単なる一般的なスペースである、その後のものと非常によく似ていますが、アラートが示唆するものと同じではありません。

難読化の観点から、これに関する潜在的な「問題」は、適切な等幅フォントと構文の強調表示のおかげで文字列が非常に明確に区切られていることです。したがって、生のスペース自体がどれほど役立つかはわかりません。ただし、より洗練されたUnicodeスペースをいくつか投入すると、より良い結果が得られる可能性があります。

于 2012-06-30T15:54:08.587 に答える