为什么(new RegExp(“w”)==/w/)在JS中为false

Why is (new RegExp("w") === /w/) false in JS?

本文关键字:JS false 中为 new RegExp 为什么      更新时间:2023-09-26

我在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

我不明白它为什么这么做。

它们是两个不同的RegExp实例,因此通过直接将它们与=====进行比较,可以比较两个不相等的引用,从而生成false

但是,当您比较它们的toString()序列化或它们的源时,您是在按值比较它们的字符串表示。由于它们基本上是完全相同的模式和标志,比较它们的字符串表示将返回true

这是MDN:上Comparison Operators文档中的一句话

请注意,当且仅当comparand是一个基元如果两个操作数都是对象,则它们是作为对象进行比较,并且只有当两者都引用时,相等性测试才为真相同的对象

CCD_ 7是对象,CCD_。两者分别实例化。需要我多说几句吗?