Так как вы можете сохранить регулярное выражение в переменной
var regexp = /a/;
почему
console.log(/a/ == /a/);
и даже
var regexp1 = /a/;
var regexp2 = /a/;
console.log(regexp1 == regexp2);
оба возвращают false?
Ответ 1
Попробуйте следующее:
String(regexp1) === String(regexp2))
Вы получаете false, потому что эти два являются разными объектами.
Ответ 2
"Проблема":
regex является object - a ссылочным типом, поэтому сравнение выполняется по ссылке, и это два разных объекта.
console.log(typeof /a/); // "object"
Если оба операнда являются объектами, тогда JavaScript сравнивает внутренние ссылки, равные, когда операнды относятся к одному и тому же объекту в памяти.
Еще один "взломать", чтобы заставить toString() на regex es:
console.log(a + "" === b + "");
Ответ 3
Просто догадаться - но JavaScript не создает объект RegExp для вашего регулярного выражения, и потому, потому что вы создали два разных объекта (хотя они имеют одинаковое значение), они на самом деле разные?
Ответ 4
Для примитивных типов данных, таких как int, string, boolean javascript знает, что сравнивать, но для таких объектов, как date или regex, оператор только смотрит на место в памяти, потому что вы определяете свои регулярные выражения независимо, у них есть два разных места в памяти, поэтому они не равны.