为什么JS中新的RegExp(“\\ w”)=== / \ w /)为false?

时间:2012-08-25 19:17:46

标签: javascript regex

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

我不明白为什么会这样做。

2 个答案:

答案 0 :(得分:15)

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

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

答案 1 :(得分:2)

以下是关于MDN的Comparison Operators文档的引用:

  

请注意,当且仅当对象被转换为对象时,该对象才会转换为基元   比较是原始的。 如果两个操作数都是对象,那么它们就是   作为对象进行比较,只有两个引用时,相等测试才为真   相同的对象。

new RegExp("\\w")是一个对象,/\w/也是。两者都单独实例化。需要我说更多吗?