当在RegEx.prototype.test()上调用null时,JS运行时似乎将null转换为其字符串形式("null"),然后根据该格式测试正则表达式。有几个例子:
/[a-z]+/.test(null)
true
/null/.test(null)
true
/[0-9]+/.test(null)
false
/nnull/.test(null)
false我的问题是:
这种行为是非常不直观的。由于null在概念上表示没有任何对象,因此从概念上讲,针对该对象的RegEx测试将失败,因为不应该对其进行测试。许多基本的RegEx将成功地在"null"上进行测试,这一点也没有帮助。
我已经在Node.js和Firefox中证实了这种行为。
发布于 2016-02-18 05:09:47
是的,这是按照规定的。
根据2015年版本(第6版)中的第21.2.5.13节"RegExp.prototype.test( S )“,最初的几个步骤之一是将"ToString“操作应用于参数S,并使用其结果。"ToString“操作将各种非字符串值转换为字符串值,特别是将null转换为"null".
发布于 2016-02-18 05:09:46
21.2.5.13 RegExp.prototype.test( S)
采取了以下步骤:
查看ToString(S),您将看到null = "null“,并得到所看到的内容。
https://stackoverflow.com/questions/35473255
复制相似问题