首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >JavaScript regex - null参数使regex匹配。

JavaScript regex - null参数使regex匹配。
EN

Stack Overflow用户
提问于 2014-12-08 13:49:52
回答 2查看 5.7K关注 0票数 10

我正在编写一个正则表达式,用于JavaScript。在测试时,我遇到了一些奇怪的行为,并将其归结为:

代码语言:javascript
代码运行次数:0
运行
复制
/^[a-z]/.test("abc"); // <-- returns true as expected
/^[a-z]/.test(null);  // <-- returns true, but why?

我假设最后一种情况将返回false,因为它不满足正则表达式(值为null,因此,不要从范围内的字符开始)。所以,有人能解释一下为什么不是这样吗?

如果我在C#中做同样的测试:

代码语言:javascript
代码运行次数:0
运行
复制
var regex = new Regex("^[a-z]");
var res = regex.IsMatch(null); // <-- ArgumentNullException

..。我得到了一个有意义的ArgumentNullException。所以,我想在JavaScript中测试正则表达式时,您必须手动进行null检查吗?

我试着寻找一个解释,但没有任何运气。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-08 13:51:39

这是因为test转换它的参数:null被转换成"null"字符串。

您可以在控制台中检查:

代码语言:javascript
代码运行次数:0
运行
复制
/^null$/.test(null)

返回true

ToString(argument)的调用是在ECMAScript specification中指定的(参见ToString)。

票数 12
EN

Stack Overflow用户

发布于 2014-12-08 13:52:18

在这里,null正在将类型转换为String表单,即"null"

"null"与您提供的regex匹配,这就是它要计算到true的原因。

在Javascript中,所有内容(或大部分)都是一个Object,它具有ToString方法,如果需要进行类型传递,该方法将在内部自动调用。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27359464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档