为什么 JavaScript 对于空对象的 RegExp test() 方法返回不同的结果?

问题描述 投票:0回答:2

我最近遇到一个代码片段(一个笑话),其中 JavaScript 的

test()
对象的
RegExp
方法与空对象作为参数一起使用。这是代码:

console.log(new RegExp({}).test('mom')); // true
console.log(new RegExp({}).test('dad')); // false

有人可以解释为什么会发生吗?

javascript regex object
2个回答
0
投票

RegExp
构造函数将第一个参数转换为字符串。一个空物体变成了

new RegExp('[object Object]')

鉴于这代表一个 regexp 字符类

"mom"
通过,因为它包含
"o"


0
投票

这是一个奇怪的事实。 RegExp 构造函数 接受字符串作为其第一个参数。由于您传递的是

{}
,因此它会被强制转换为字符串,并且对象的强制转换是文字字符串
[object Object]

出于偶然的巧合,方括号在正则表达式中具有精确的含义,它的意思是“集合中的这些字符之一”。

因此,正则表达式等于

[objectO ]

© www.soinside.com 2019 - 2024. All rights reserved.