7

Chromeのコンソールで次のことを試しました。

var r1 = new RegExp("\\w"); // → /\w/
var r2 = /\w/; // → /\w/
r1 === r2; // → false
r1 == r2; // → false
r1.toString() === r2.toString(); // → true
r1.source === r2.source; // → true

なぜそうなるのかわかりません。

4

2 に答える 2

15

それらは2つの異なるRegExpインスタンスであるため、それらを直接比較する=====、2つの等しくない参照を比較すると、結果としてfalse

ただし、toString()シリアル化またはソースのいずれかを比較すると、文字列表現を値で比較していることになります。それらは基本的にまったく同じパターンとフラグであるため、それらの文字列表現を比較すると。が返されtrueます。

于 2012-08-25T19:20:35.473 に答える
2

以下は、 MDNの比較演算子のドキュメントからの引用です。

オブジェクトは、比較対象がプリミティブである場合にのみ、プリミティブに変換されることに注意してください。両方のオペランドがオブジェクトである場合、それらはオブジェクトとして比較され、両方が同じオブジェクトを参照する場合にのみ、同等性テストが true になります。

new RegExp("\\w")はオブジェクトであり、そうです/\w/。どちらも別々にインスタンス化されています。もっと言う必要がありますか?

于 2012-08-25T21:54:04.443 に答える