为什么JavaScript RegExp/^\w+;$/匹配未定义?
为什么RegExp为什么JavaScript RegExp/^\w+;$/匹配未定义?,javascript,regex,firefox,Javascript,Regex,Firefox,为什么RegExp/^\w+$/匹配未定义的 示例代码: alert(/^\w+$/.test(undefined)); 这将在Firefox 3中显示为真(只有我测试过它的浏览器)。当未定义的被转换为字符串时(正则表达式就是这样做的),它会生成字符串“未定义的”,然后进行匹配 /(\w)(\w)(\w)(\w)(\w)/.exec(undefined); 返回:[“未定义”、“u”、“n”、“d”、“e”、“f”] 它将undefined视为字符串“undefined”参见ECMASc
/^\w+$/
匹配未定义的
示例代码:
alert(/^\w+$/.test(undefined));
这将在Firefox 3中显示为真(只有我测试过它的浏览器)。当
未定义的
被转换为字符串时(正则表达式就是这样做的),它会生成字符串“未定义的”
,然后进行匹配
/(\w)(\w)(\w)(\w)(\w)/.exec(undefined);
返回:[“未定义”、“u”、“n”、“d”、“e”、“f”]
它将undefined视为字符串
“undefined”
参见ECMAScript规范第15.10.6.2节,了解将从.match方法调用的RegExp.prototype.exec(字符串)。当计算为true时,match基本上是exec
以下是规范中的逐字逐句:
对正则表达式执行字符串的正则表达式匹配,并返回包含匹配结果的数组对象,如果字符串不匹配,则返回null
搜索字符串ToString(string)以查找正则表达式模式的匹配项,如下所示:
在命令行中使用JScript在浏览器外部进行了测试,得到了相同的结果。可能有点。。。但是JavaScript中没有真正的异常概念或类似概念,一点古怪的行为总比默默死去要好。不过,在我(无可否认,相当有限)的经历中,还是有一些错误(),在大多数情况下,它们没有那么多用处……糟糕的语言设计。当你测试是否存在任何值的字符串时,这在JS中会成为一个大问题。当字符串变量已定义但未填充时,如var str;那么它的值就是未定义的属性。它被test()方法强制为字符串类型,并且在逻辑上表现为字符串实际上已定义并设置为字符串值“undefined”。因此,不要使用test()检查字符串是否存在,或者如果存在,请先显式检查未定义的字符串。