2012-06-14 4 views

ответ

19

Попробуйте это:

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

Вы получаете ложное, потому что те две разные объекты.

7

"Проблема":

regex является object - это ссылочного типа, поэтому сравнительную делается ссылка, и это два разных объекта.

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

Если оба операнда являются объектами, то JavaScript сравнивает внутренние ссылки, которые равны, когда операнды относятся к одному объекту в памяти.

MDN

Решение:

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

Live DEMO

Другой "взломать", чтобы заставить toString() на regex еся:

console.log(a + "" === b + "");​ 
3

Просто угадайте, но JavaScript не создает объект RegExp для вашего регулярного выражения, и потому, потому что вы создали два разных объекта (хотя они имеют одинаковое «значение»), они на самом деле разные?

+0

Это не догадка, это правильный ответ ... +1 – gdoron

2

Для примитивных типов данных, таких как int, string, boolean javascript знает, что сравнивать, но для таких объектов, как дата или регулярное выражение, которые оператор смотрит только на место в памяти, поскольку вы определяете свои регулярные выражения независимо, у них есть два разных места в памяти поэтому они не равны.