簡単な答え:source
プロパティの値は、正規表現リテラル/(?:)/
とから取得するオブジェクトで異なりますnew RegExp()
。リテラルの/(?:)/
場合は、ですが、オブジェクトの場合は空の文字列です。とを実行する/ /
とnew RegExp(" ")
、source
プロパティの値は同じになります(どちらも1つのスペース文字を含む文字列です)。
長い答え:Qunitのソースを見ると、次のコードが表示されます。
"regexp": function (b, a) {
return QUnit.objectType(b) === "regexp" &&
a.source === b.source && // the regex itself
a.global === b.global && // and its modifers (gmi) ...
a.ignoreCase === b.ignoreCase &&
a.multiline === b.multiline;
};
このコードを使用すると、ソースパラメーターがどのように異なるかを確認できます(各正規表現引数のプロパティを出力し、それらが等しいかどうかをテストするだけです)。
function eq(x, y) {
console.log("x.source:", "'" + x.source + "'", "y.source:", "'" + y.source + "'", "===:", x.source === y.source);
console.log("x.global:", x.global, "y.global:", y.global, "===:", x.global === y.global);
console.log("x.ignoreCase:", x.ignoreCase, "y.ignoreCase:", y.ignoreCase, "===:", x.ignoreCase === y.ignoreCase);
console.log("x.multiline:", x.multiline, "y.multiline:", y.multiline, "===:", x.multiline === y.multiline);
}
これをで呼び出すとeq(/(?:)/, new RegExp());
、次のようになります。
x.source: '(?:)' y.source: '' ===: false
x.global: false y.global: false ===: true
x.ignoreCase: false y.ignoreCase: false ===: true
x.multiline: false y.multiline: false ===: true
あなたがそれをあなたと呼ぶとき、あなたはそれをeq(/ /, new RegExp(" "));
得るのに対して:
x.source: ' ' y.source: ' ' ===: true
x.global: false y.global: false ===: true
x.ignoreCase: false y.ignoreCase: false ===: true
x.multiline: false y.multiline: false ===: true