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

bfo*_*ine 7 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
Run Code Online (Sandbox Code Playgroud)

我不明白为什么会那样做.

Bol*_*ock 15

它们是两个不同的RegExp实例,因此通过直接比较它们==或者===您正在比较两个不相等的引用,导致false.

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

  • +1甚至`/\w/=== /\w /`产生`false`; 原因不在于"新的正则表达式"与文字. (6认同)