首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RegEx对空的测试

RegEx对空的测试
EN

Stack Overflow用户
提问于 2016-02-18 05:05:09
回答 2查看 455关注 0票数 2

当在RegEx.prototype.test()上调用null时,JS运行时似乎将null转换为其字符串形式("null"),然后根据该格式测试正则表达式。有几个例子:

代码语言:javascript
运行
复制
/[a-z]+/.test(null)
    true

/null/.test(null)
    true

/[0-9]+/.test(null)
    false

/nnull/.test(null)
    false

我的问题是:

  1. 为什么?
  2. 根据目前的规范,这一行为正确吗?

这种行为是非常不直观的。由于null在概念上表示没有任何对象,因此从概念上讲,针对该对象的RegEx测试将失败,因为不应该对其进行测试。许多基本的RegEx将成功地在"null"上进行测试,这一点也没有帮助。

我已经在Node.js和Firefox中证实了这种行为。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-18 05:09:47

是的,这是按照规定的。

根据2015年版本(第6版)中的第21.2.5.13节"RegExp.prototype.test( S )“,最初的几个步骤之一是将"ToString“操作应用于参数S,并使用其结果。"ToString“操作将各种非字符串值转换为字符串值,特别是将null转换为"null".

票数 2
EN

Stack Overflow用户

发布于 2016-02-18 05:09:46

21.2.5.13 RegExp.prototype.test( S)

采取了以下步骤:

  1. 设R是这个值。
  2. 如果Type(R)不是Object,则抛出TypeError异常。
  3. 设字符串为ToString(S)。
  4. ReturnIfAbrupt(string)
  5. 让匹配是RegExpExec(R,string)。
  6. ReturnIfAbrupt(match)
  7. 如果匹配不为空,则返回true;否则返回false。

查看ToString(S),您将看到null = "null“,并得到所看到的内容。

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

https://stackoverflow.com/questions/35473255

复制
相关文章

相似问题

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