为什么RegExp /^\w+$/
匹配undefined
?
示例代码:
alert(/^\w+$/.test(undefined));
这将在Firefox 3中显示为true(仅我在其上测试过的浏览器)。
答案 0 :(得分:43)
当undefined
被强制转换为字符串(正则表达式)时,它会生成字符串"undefined"
,然后匹配。
答案 1 :(得分:4)
/(\w)(\w)(\w)(\w)(\w)/.exec(undefined);
返回:["undef", "u", "n", "d", "e", "f"]
将undefined视为字符串"undefined"
。
答案 2 :(得分:4)
有关将从.match方法调用的RegExp.prototype.exec( string ),请参阅ECMAScript规范部分15.10.6.2。当它被评估为真时,匹配基本上是exec。
以下是规范中的逐字逐句: 对正则表达式执行字符串的正则表达式匹配,并返回包含匹配结果的Array对象,如果字符串不匹配,则返回null 搜索字符串ToString(string)以查找正则表达式模式的出现,如下所示:
正如您所看到的,它会将任何输入转换为字符串,因此未定义变为“未定义”且匹配为true。
在命令行中使用JScript在浏览器外部测试它并获得相同的结果。