なぜか
console.log(/a/ == /a/);
と
var regexp1 = /a/;
var regexp2 = /a/;
console.log(regexp1 == regexp2);
両方とも戻りfalse
ますか?
なぜか
console.log(/a/ == /a/);
と
var regexp1 = /a/;
var regexp2 = /a/;
console.log(regexp1 == regexp2);
両方とも戻りfalse
ますか?
これを試して:
String(regexp1) === String(regexp2))
これら2つは異なるオブジェクトであるため、falseになります。
"問題":
regex
はobject
-参照型であるため、比較は参照によって行われ、これらは2つの異なるオブジェクトです。
console.log(typeof /a/); // "object"
両方のオペランドがオブジェクトの場合、JavaScriptは、オペランドがメモリ内の同じオブジェクトを参照するときに等しい内部参照を比較します。
解決:
var a = /a/;
var b = /a/;
console.log(a.toString() === b.toString()); // true! yessss!
esを強制するもう1つの「ハック」は次のとおりtoString()
です。regex
console.log(a + "" === b + "");
推測ですが、JavaScriptはRegExp
正規表現のオブジェクトを作成しません。したがって、2つの異なるオブジェクトを作成したため(同じ「値」を持っていても)、実際には異なりますか?
int、string、boolean javascriptなどのプリミティブデータ型の場合、比較対象は認識されますが、dateやregexなどのオブジェクトの場合、正規表現を個別に定義するため、演算子はメモリ内の場所のみを調べます。同等。