我最近遇到一个代码片段(一个笑话),其中 JavaScript 的
test()
对象的 RegExp
方法与空对象作为参数一起使用。这是代码:
console.log(new RegExp({}).test('mom')); // true
console.log(new RegExp({}).test('dad')); // false
有人可以解释为什么会发生吗?
RegExp
构造函数将第一个参数转换为字符串。一个空物体变成了
new RegExp('[object Object]')
鉴于这代表一个 regexp 字符类,
"mom"
通过,因为它包含 "o"
。
这是一个奇怪的事实。 RegExp 构造函数 接受字符串作为其第一个参数。由于您传递的是
{}
,因此它会被强制转换为字符串,并且对象的强制转换是文字字符串 [object Object]
。
出于偶然的巧合,方括号在正则表达式中具有精确的含义,它的意思是“集合中的这些字符之一”。
因此,正则表达式等于
[objectO ]