Ответ 1
Когда undefined
передается в строку (которая выполняется в регулярном выражении), она создает строку "undefined"
, которая затем сопоставляется.
Почему RegExp /^\w+$/
соответствует undefined
?
Пример кода:
alert(/^\w+$/.test(undefined));
Это будет отображаться в Firefox 3 (только браузер, в котором я тестировал его).
Когда undefined
передается в строку (которая выполняется в регулярном выражении), она создает строку "undefined"
, которая затем сопоставляется.
/(\w)(\w)(\w)(\w)(\w)/.exec(undefined);
возвращает: ["undef", "u", "n", "d", "e", "f"]
Он обрабатывает undefined как строку "undefined"
.
См. раздел 15.10.6.2 спецификации ECMAScript для RegExp.prototype.exec(строка), который вызывается из метода .match. match в основном является exec, когда он оценивается как true.
Вот слово в слово из спецификации: Выполняет сопоставление регулярных выражений строки с регулярным выражением и возвращает объект Array, содержащий результаты совпадения, или null, если строка не соответствует Строка ToString (string) выполняется для поиска регулярного выражения следующим образом:
Как вы можете видеть, он преобразует любой ввод в строку, поэтому undefined становится "undefined", и это будет соответствовать true.
Протестировано это также вне браузера, используя JScript в командной строке и получив тот же результат.