あなたが持っている場所:
a === undefined // not touched -> on call variable a got exception
これは、 aの値がundefinedかどうかをテストしています。a が宣言されていて値が割り当てられていない場合 (この場合、その値の評価はundefinedを返します)、または undefined の値が割り当てられている場合は true を返します。aが宣言されていないか、初期化されていない場合、参照エラーがスローされます。
それ以外の場合はすべてfalseを返します。
の:
/a/.test(function(){a}) // => true !!?
式は、次のように新しい正規表現を作成する/a/
正規表現初期化子 (またはリテラル) です。
new RegExp('a');
これは、文字列内の任意の場所にある "a" 文字に一致します。
次に、正規表現のテストメソッドが呼び出され、true または false が返されます。testへの引数は文字列であることを意図しているため、そうでない場合は文字列に型変換されます。これにより、関数を表す文字列が返されます (基本的には関数の実際のコード)。したがって、効果的に次のものが得られます。
var re = new RegExp('a');
var s = 'function(){a}';
re.test(s);
true を返します (文字列に「a」があるため)。
編集
あなたはこれに関連して尋ねていたようです:
var initializing = false,
fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/;
これは、関数オブジェクトを正規表現のtestメソッドでテストした結果に基づいて、関数オブジェクトのテストを作成することです。
テスト メソッドへの引数は文字列であると想定されているため、ECMA-262 によれば、そうでない場合は文字列に変換されます。引数がオブジェクトの場合、そのtoStringメソッドが呼び出され、通常は関数本体でコードを返す関数に対して呼び出されますが、すべての ECMAScript ホストで常にではありません。
たとえば、組み込み関数の多くは次のようなものを返します。
function pow() {
[native code]
}
したがって、上記が行っていることは、「関数が関数本体を返す場合、以下をfnTestに割り当てます」と言っています。
new RegExp('\\b_super\\b');
(この形式の正規表現には二重のバックスラッシュが必要であることに注意してください) これは、"_super" という単語を含む文字列に一致します。
関数が関数本体を返さない場合は、fnTestを次のように設定します。
new RegExp('.*');
これは、0 個以上の文字を含む任意の文字列に一致します。