27

なぜか

console.log(/a/ == /a/);

var regexp1 = /a/;
var regexp2 = /a/;
console.log(regexp1 == regexp2);

両方とも戻りfalseますか?

4

4 に答える 4

48

これを試して:

String(regexp1) === String(regexp2))

これら2つは異なるオブジェクトであるため、falseになります。

于 2012-06-14T12:12:45.263 に答える
14

"問題":

regexobject-参照型であるため、比較は参照によって行われ、これらは2つの異なるオブジェクトです。

console.log(typeof /a/); // "object"

両方のオペランドがオブジェクトの場合、JavaScriptは、オペランドがメモリ内の同じオブジェクトを参照するときに等しい内部参照を比較します。

MDN

解決:

​var a = /a/;
var b = /a/;
console.log(​​​a.toString() === b.toString()); // true! yessss!

ライブデモ

esを強制するもう1つの「ハック」は次のとおりtoString()です。regex

console.log(a + "" === b + "");​
于 2012-06-14T12:13:00.987 に答える
4

推測ですが、JavaScriptはRegExp正規表現のオブジェクトを作成しません。したがって、2つの異なるオブジェクトを作成したため(同じ「値」を持っていても)、実際には異なりますか?

于 2012-06-14T12:13:56.660 に答える
2

int、string、boolean javascriptなどのプリミティブデータ型の場合、比較対象は認識されますが、dateやregexなどのオブジェクトの場合、正規表現を個別に定義するため、演算子はメモリ内の場所のみを調べます。同等。

于 2012-06-14T12:16:02.110 に答える