Когда undefined
приводится к строке (что и делает регулярное выражение), создается строка «undefined»
, которая затем сопоставляется.
See ECMAScript Specification section 15.10.6.2 for RegExp.prototype.exec(string) which will be called from .match method. match basically is exec when it's evaluated to true.
Here is word for word from the specification: Выполняет сопоставление строки регулярного выражения с регулярным выражением и возвращает объект Array, содержащий результаты сопоставления, или null, если строка не соответствует В строке ToString (строка) ищется вхождение шаблона регулярного выражения следующим образом:
Как видите, это будет преобразовать любой ввод в строку, так что undefined становится undefined, и это будет соответствовать true.
Проверил это также вне браузера с помощью JScript в командной строке и получил тот же результат.
/(\w)(\w)(\w)(\w)(\w)/.exec(undefined);
возвращает: ["undef", "u", "n", "d", "e", "f"]
undefined рассматривается как строка "неопределенный"
.